Creating a global variable in JIT context

I'm trying to create a global variable initialized to zero, and return
its value from a newly created function, in JIT context. I'm keeping
all types as i32 for the moment, and I only have the one module
object.

This is the code I have for creating the global variable:

  const Type *type = Type::getInt32Ty(getGlobalContext());
// Constant *zerov = Constant::getNullValue(type);
  Constant *zerov = Constant::getIntegerValue(type, APInt(32, 0));
  V = new GlobalVariable(getGlobalContext(), type, 0,
GlobalValue::PrivateLinkage, zerov, name);

And these are the error messages given by verifyFunction:

Function return type does not match operand type of return inst!
  ret i32* @x i32Referencing global in another module!
  ret i32* @xBroken module found, compilation aborted!

Any idea of what I might be doing wrong? Is this the right way to be
going about it in the first place?

You have not specified/attached the module.

Use:

GlobalVariable::GlobalVariable (Module &, const Type *, bool, LinkageTypes, Constant *, const Twine &, GlobalVariable*InsertBefore=0, bool ThreadLocal=false, unsigned AddressSpace=0)

as described in:

http://llvm.org/doxygen/classllvm_1_1GlobalVariable.html

Garrison

Do you use load to get the value of V? If not then you probably return i32* instead of i32.

Victor

Yes, the module specification and load instruction were exactly the
things I was missing. Thanks!