Changes in directory llvm/lib/Linker:
LinkModules.cpp updated: 1.141 -> 1.142 --- Log message: When linking two modules, we should copy the alias. --- Diffs of the changes: (+28 -0) LinkModules.cpp | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+) Index: llvm/lib/Linker/LinkModules.cpp diff -u llvm/lib/Linker/LinkModules.cpp:1.141 llvm/lib/Linker/LinkModules.cpp:1.142 --- llvm/lib/Linker/LinkModules.cpp:1.141 Wed Jun 6 17:01:12 2007 +++ llvm/lib/Linker/LinkModules.cpp Thu Jun 28 14:02:54 2007 @@ -561,6 +561,31 @@ return false; } +// LinkAlias - Loop through the alias in the src module and link them into the +// dest module. +static bool LinkAlias(Module *Dest, const Module *Src, std::string *Err) { + // Loop over all alias in the src module + for (Module::const_alias_iterator I = Src->alias_begin(), + E = Src->alias_end(); I != E; ++I) { + const GlobalAlias *GA = I; + + GlobalValue *NewAliased = NULL; + const GlobalValue *Aliased = GA->getAliasedGlobal(); + if (isa<GlobalVariable>(*Aliased)) + NewAliased = Dest->getGlobalVariable(Aliased->getName()); + else if (isa<Function>(*Aliased)) + NewAliased = Dest->getFunction(Aliased->getName()); + // FIXME: we should handle the bitcast alias. + assert(NewAliased && "Can't find the aliased GV."); + + GlobalAlias *NewGA = new GlobalAlias(GA->getType()->getElementType(), + GA->getLinkage(), GA->getName(), + NewAliased, Dest); + CopyGVAttributes(NewGA, GA); + } + return false; +} + // LinkGlobalInits - Update the initializers in the Dest module now that all // globals that may be referenced are in Dest. @@ -1005,6 +1030,9 @@ // If there were any appending global variables, link them together now. if (LinkAppendingVars(Dest, AppendingVars, ErrorMsg)) return true; + // If there were any alias, link them now. + if (LinkAlias(Dest, Src, ErrorMsg)) return true; + // If the source library's module id is in the dependent library list of the // destination library, remove it since that module is now linked in. sys::Path modId; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits