Fix bug: FunctionResolve/2003-05-31-AllInternalDecls.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6486 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-05-31 21:57:06 +00:00
parent 3ce0ea8fd8
commit c16e631e94

View File

@ -309,6 +309,23 @@ static bool ProcessGlobalsWithSameName(Module &M,
}
if (Globals.size() > 1) { // Found a multiply defined global...
// If there are no external declarations, and there is at most one
// externally visible instance of the global, then there is nothing to do.
//
bool HasExternal = false;
unsigned NumInstancesWithExternalLinkage = 0;
for (unsigned i = 0, e = Globals.size(); i != e; ++i) {
if (Globals[i]->isExternal())
HasExternal = true;
else if (!Globals[i]->hasInternalLinkage())
NumInstancesWithExternalLinkage++;
}
if (!HasExternal && NumInstancesWithExternalLinkage <= 1)
return false; // Nothing to do? Must have multiple internal definitions.
// We should find exactly one concrete function definition, which is
// probably the implementation. Change all of the function definitions and
// uses to use it instead.