mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151747 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- llvm/unittest/Bitcode/BitReaderTest.cpp - Tests for BitReader ------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "llvm/ADT/SmallString.h"
 | |
| #include "llvm/Analysis/Verifier.h"
 | |
| #include "llvm/Bitcode/BitstreamWriter.h"
 | |
| #include "llvm/Bitcode/ReaderWriter.h"
 | |
| #include "llvm/Constants.h"
 | |
| #include "llvm/Instructions.h"
 | |
| #include "llvm/LLVMContext.h"
 | |
| #include "llvm/Module.h"
 | |
| #include "llvm/PassManager.h"
 | |
| #include "llvm/Support/MemoryBuffer.h"
 | |
| #include "gtest/gtest.h"
 | |
| 
 | |
| namespace llvm {
 | |
| namespace {
 | |
| 
 | |
| static Module *makeLLVMModule() {
 | |
|   Module* Mod = new Module("test-mem", getGlobalContext());
 | |
| 
 | |
|   FunctionType* FuncTy =
 | |
|     FunctionType::get(Type::getVoidTy(Mod->getContext()), false);
 | |
|   Function* Func = Function::Create(FuncTy,GlobalValue::ExternalLinkage,
 | |
|                                     "func", Mod);
 | |
| 
 | |
|   BasicBlock* Entry = BasicBlock::Create(Mod->getContext(), "entry", Func);
 | |
|   new UnreachableInst(Mod->getContext(), Entry);
 | |
| 
 | |
|   BasicBlock* BB = BasicBlock::Create(Mod->getContext(), "bb", Func);
 | |
|   new UnreachableInst(Mod->getContext(), BB);
 | |
| 
 | |
|   PointerType* Int8Ptr = Type::getInt8PtrTy(Mod->getContext());
 | |
|   new GlobalVariable(*Mod, Int8Ptr, /*isConstant=*/true,
 | |
|                      GlobalValue::ExternalLinkage,
 | |
|                      BlockAddress::get(BB), "table");
 | |
| 
 | |
|   return Mod;
 | |
| }
 | |
| 
 | |
| static void writeModuleToBuffer(SmallVectorImpl<char> &Buffer) {
 | |
|   Module *Mod = makeLLVMModule();
 | |
|   raw_svector_ostream OS(Buffer);
 | |
|   WriteBitcodeToFile(Mod, OS);
 | |
| }
 | |
| 
 | |
| TEST(BitReaderTest, MaterializeFunctionsForBlockAddr) { // PR11677
 | |
|   SmallString<1024> Mem;
 | |
|   writeModuleToBuffer(Mem);
 | |
|   MemoryBuffer *Buffer = MemoryBuffer::getMemBuffer(Mem.str(), "test", false);
 | |
|   std::string errMsg;
 | |
|   Module *m = getLazyBitcodeModule(Buffer, getGlobalContext(), &errMsg);
 | |
|   PassManager passes;
 | |
|   passes.add(createVerifierPass());
 | |
|   passes.run(*m);
 | |
| }
 | |
| 
 | |
| }
 | |
| }
 |