2012-01-23 37 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 ++編譯:

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

CreateGlobalStringPtr是創造一個GEP你的字符串,它的建設者需要的功能和基本塊插入指令之中。

請參閱include/llvm/Support/IRBuilder.h