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

llvm-svn: 6486
This commit is contained in:
Chris Lattner 2003-05-31 21:57:06 +00:00
parent 306f8b4934
commit 2b1329611b
1 changed files with 17 additions and 0 deletions

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.