[LLVMdev] How to create Global Variables using LLVM API?

Nick Lewycky nicholas at mxc.ca
Mon May 10 22:11:00 PDT 2010


subramanyam wrote:
>
> I am new to LLVM API. and I am experimenting with it.
> I want to create Global Variables in a module.
> I am able to create local variables using IRBuilder class. I tried using
> GlobalVariable class to create global variables.
> but it doesn't work. my code looks like this:
>
> Module* mod = new Module("test", getGlobalContext());
> Constant* c = mod->getOrInsertFunction("main",
> IntegerType::get(getGlobalContext(), 32), NULL);
> Function* main = cast<Function>  (c);
> main->setCallingConv(CallingConv::C);
> Twine s("foo");
> StringRef s1("foo");
> Constant *cons = ConstantArray::get(getGlobalContext(),s1, true);
> GlobalVariable val(*mod, (Type*)
> ArrayType::get(Type::getInt8Ty(getGlobalContext()), 4),
> true,GlobalValue::ExternalLinkage, cons, s);

Firstly, don't cast to Type*. You need to #include "llvm/DerivedTypes.h" 
instead. But that's not your bug.

Don't allocate GlobalVariable val on the stack. You need to 'new' it, 
ala. 'GlobalVariable *val = new GlobalVariable(...);'

I haven't tried running your code, but give that a shot!

Nick



>
>
> Application stops running after reaching the last line. can somebody help me
> out here?
>
>




More information about the llvm-dev mailing list