class Module;
class Constant;
-class PointerType;
+class LLVMContext;
template<typename ValueSubClass, typename ItemParentClass>
class SymbolTableListTraits;
}
/// GlobalVariable ctor - If a parent module is specified, the global is
/// automatically inserted into the end of the specified modules global list.
- GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes Linkage,
+ GlobalVariable(LLVMContext &Context, const Type *Ty, bool isConstant,
+ LinkageTypes Linkage,
Constant *Initializer = 0, const std::string &Name = "",
- Module *Parent = 0, bool ThreadLocal = false,
- unsigned AddressSpace = 0);
+ bool ThreadLocal = false, unsigned AddressSpace = 0);
/// GlobalVariable ctor - This creates a global and inserts it before the
/// specified other global.
- GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes Linkage,
- Constant *Initializer, const std::string &Name,
- GlobalVariable *InsertBefore, bool ThreadLocal = false,
+ GlobalVariable(Module &M, const Type *Ty, bool isConstant,
+ LinkageTypes Linkage, Constant *Initializer,
+ const std::string &Name,
+ GlobalVariable *InsertBefore = 0, bool ThreadLocal = false,
unsigned AddressSpace = 0);
~GlobalVariable() {
///
inline bool hasInitializer() const { return !isDeclaration(); }
+ /// hasDefinitiveInitializer - Whether the global variable has an initializer,
+ /// and this is the initializer that will be used in the final executable.
+ inline bool hasDefinitiveInitializer() const {
+ return hasInitializer() &&
+ // The initializer of a global variable with weak linkage may change at
+ // link time.
+ !mayBeOverridden();
+ }
+
/// getInitializer - Return the initializer for this global variable. It is
/// illegal to call this method if the global is external, because we cannot
/// tell what the value is initialized to!