[llvm-dev] Null GlobalVariable during asm generation
Derrick McKee via llvm-dev
llvm-dev at lists.llvm.org
Tue Jan 19 13:43:46 PST 2016
Hey,
I am writing a ModulePass for LLVM. I want to create a new GlobalVariable
for each global static array defined in a module, assign to the new
GlobalVariable the result of a function call. My code seems to be creating
the global variable correctly, but after the pass completes, I get an error
saying
Operand is null
store %3 <!null operand>
My code is the following:
std::string gvName("__memsafe_gv_");
gvname.append(global->getName());
GlobalVariable *gv = new GlobalVariable(*module,
PointerType::get(global->getType()->getArrayElementType(), 0),
false,
global->getLinkage(),
0,
gvName);
gv->setAlignment(global->getAlignment());
gv->setInitializer(UndefValue::get(
PointerType::get(global->getType()->getArrayElementType(), 0)));
Value *val = insert_function_call(); // Returns CallInst or BitCast as needed
Value *cast = IRBuilder.CreateBitCast(val,
PointerType::get(type->getArrayElementType(), 0));
IRBuilder.CreateStore(cast, gv);
If I dump gv, val, cast, and the store I get the following:
@__memsafe_gv_foo = global i8* undef, align 1 %2 = bitcast i8* %1 to [6 x
i8]* %3 = bitcast [6 x i8]* %2 to i8* store i8* %3, i8** @__memsafe_gv_foo
Am I missing something that I have to do for global variables? Thanks for
the help.
--
Derrick McKee
Ph.D. Student at Purdue University
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160119/a8bbff7f/attachment.html>
More information about the llvm-dev
mailing list