Add a flag to Module::getGlobalVariable to allow it to return vars with

internal linkage.

Patch provided by Evan Jones, thanks!

llvm-svn: 24604
This commit is contained in:
Chris Lattner 2005-12-05 05:30:21 +00:00
parent ca18d19210
commit 7d4d93c52c
2 changed files with 14 additions and 13 deletions

View File

@ -137,13 +137,14 @@ public:
//
/// getGlobalVariable - Look up the specified global variable in the module
/// symbol table. If it does not exist, return null. Note that this only
/// returns a global variable if it does not have internal linkage. The type
/// argument should be the underlying type of the global, i.e., it should not
/// have the top-level PointerType, which represents the address of the
/// global.
/// symbol table. If it does not exist, return null. The type argument
/// should be the underlying type of the global, i.e., it should not have
/// the top-level PointerType, which represents the address of the global.
/// If AllowInternal is set to true, this function will return types that
/// have InternalLinkage. By default, these types are not returned.
///
GlobalVariable *getGlobalVariable(const std::string &Name, const Type *Ty);
GlobalVariable *getGlobalVariable(const std::string &Name, const Type *Ty,
bool AllowInternal = false);
//===--------------------------------------------------------------------===//

View File

@ -206,17 +206,17 @@ Function *Module::getNamedFunction(const std::string &Name) {
//
/// getGlobalVariable - Look up the specified global variable in the module
/// symbol table. If it does not exist, return null. Note that this only
/// returns a global variable if it does not have internal linkage. The type
/// argument should be the underlying type of the global, ie, it should not
/// have the top-level PointerType, which represents the address of the
/// global.
/// symbol table. If it does not exist, return null. The type argument
/// should be the underlying type of the global, i.e., it should not have
/// the top-level PointerType, which represents the address of the global.
/// If AllowInternal is set to true, this function will return types that
/// have InternalLinkage. By default, these types are not returned.
///
GlobalVariable *Module::getGlobalVariable(const std::string &Name,
const Type *Ty) {
const Type *Ty, bool AllowInternal) {
if (Value *V = getSymbolTable().lookup(PointerType::get(Ty), Name)) {
GlobalVariable *Result = cast<GlobalVariable>(V);
if (!Result->hasInternalLinkage())
if (AllowInternal || !Result->hasInternalLinkage())
return Result;
}
return 0;