2012-01-23 1 views
2

다음 충돌에 대한 방법 + 기본 블록을 생성하지 않는 경우 충돌 :CreateGlobalStringPtr 내가 CreateGlobalStringPtr 메인

#include "llvm/Support/DataTypes.h" 
#include "llvm/LLVMContext.h" 
#include "llvm/Module.h" 
#include "llvm/Constants.h" 
#include "llvm/Function.h" 
#include "llvm/BasicBlock.h" 
#include "llvm/ExecutionEngine/ExecutionEngine.h" 
#include "llvm/ExecutionEngine/GenericValue.h" 
#include "llvm/Support/IRBuilder.h" 

#include <vector> 
#include <cstdio> 
#include <string> 

int main() 
{ 
    llvm::LLVMContext & context = llvm::getGlobalContext(); 
    llvm::Module *module = new llvm::Module("asdf", context); 
    llvm::IRBuilder<> builder(context); 
    llvm::Value *helloWorld = builder.CreateGlobalStringPtr("hello world!\n"); // crash here 
} 

을 그리고이 하나가 아닌 여기에 무슨 일이 일어나고 있는지 어떤 생각을 수행합니다

#include "llvm/Support/DataTypes.h" 
#include "llvm/LLVMContext.h" 
#include "llvm/Module.h" 
#include "llvm/Constants.h" 
#include "llvm/Function.h" 
#include "llvm/BasicBlock.h" 
#include "llvm/ExecutionEngine/ExecutionEngine.h" 
#include "llvm/ExecutionEngine/GenericValue.h" 
#include "llvm/Support/IRBuilder.h" 

#include <vector> 
#include <cstdio> 
#include <string> 

int main() 
{ 
    llvm::LLVMContext & context = llvm::getGlobalContext(); 
    llvm::Module *module = new llvm::Module("asdf", context); 
    llvm::IRBuilder<> builder(context); 

    // Added extra 
    llvm::FunctionType *funcType = llvm::FunctionType::get(builder.getVoidTy(), false); 
    llvm::Function *mainFunc = llvm::Function::Create(funcType, llvm::Function::ExternalLinkage, "main", module); 
    llvm::BasicBlock *entry = llvm::BasicBlock::Create(context, "entry", mainFunc); 
    builder.SetInsertPoint(entry); 

    llvm::Value *helloWorld = builder.CreateGlobalStringPtr("hello world!\n"); 
} 

을 메인 루틴과 엔트리 포인트를 만드는 것이 어떻게 충돌을 제거 할 수 있는지 확신 할 수 없습니다. 그들은 무관하다고 생각했습니다. 여기 내 옵션 g ++ 컴파일을 위해 다음과 같습니다 CreateGlobalStringPtr이 빌더에 명령어를 삽입하는 기능과 기본 블록을 필요로 당신의 문자열에 GEP를 만드는

llvm-config --cxxflags --ldflags --libs 
-I/usr/include -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 -fno-exceptions -fno-rtti -fno-common -Woverloaded-virtual -Wcast-qual 
-L/usr/lib -lpthread -lm 
-lLLVMXCoreCodeGen -lLLVMTableGen -lLLVMSystemZCodeGen -lLLVMSparcCodeGen -lLLVMPTXCodeGen -lLLVMPowerPCCodeGen -lLLVMMSP430CodeGen -lLLVMMipsCodeGen -lLLVMMCJIT -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCDisassembler -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMPTXDesc -lLLVMPTXInfo -lLLVMPTXAsmPrinter -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMMBlazeDisassembler -lLLVMMBlazeAsmParser -lLLVMMBlazeCodeGen -lLLVMMBlazeDesc -lLLVMMBlazeAsmPrinter -lLLVMMBlazeInfo -lLLVMLinker -lLLVMipo -lLLVMInterpreter -lLLVMInstrumentation -lLLVMJIT -lLLVMExecutionEngine -lLLVMDebugInfo -lLLVMCppBackend -lLLVMCppBackendInfo -lLLVMCellSPUCodeGen -lLLVMCellSPUDesc -lLLVMCellSPUInfo -lLLVMCBackend -lLLVMCBackendInfo -lLLVMBlackfinCodeGen -lLLVMBlackfinDesc -lLLVMBlackfinInfo -lLLVMBitWriter -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMX86Info -lLLVMAsmParser -lLLVMARMDisassembler -lLLVMARMAsmParser -lLLVMARMCodeGen -lLLVMARMDesc -lLLVMARMAsmPrinter -lLLVMARMInfo -lLLVMArchive -lLLVMBitReader -lLLVMAlphaCodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMCore -lLLVMAlphaDesc -lLLVMAlphaInfo -lLLVMMC -lLLVMSupport 

답변

1

.

참조/llvm/Support/IRBuilder.h 참조

관련 문제