mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-16 23:38:40 +00:00
Fix bug: Linker/2003-08-28-TypeResolvesGlobal.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8202 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0c49b89298
commit
652f032ce9
@ -231,11 +231,21 @@ void SymbolTable::refineAbstractType(const DerivedType *OldType,
|
|||||||
GlobalValue *ExistGV = dyn_cast<GlobalValue>(TI->second);
|
GlobalValue *ExistGV = dyn_cast<GlobalValue>(TI->second);
|
||||||
GlobalValue *NewGV = dyn_cast<GlobalValue>(V.second);
|
GlobalValue *NewGV = dyn_cast<GlobalValue>(V.second);
|
||||||
|
|
||||||
if (ExistGV && NewGV && ExistGV->isExternal() && NewGV->isExternal()) {
|
if (ExistGV && NewGV) {
|
||||||
|
assert((ExistGV->isExternal() || NewGV->isExternal()) &&
|
||||||
|
"Two planes folded together with overlapping value names!");
|
||||||
|
|
||||||
|
// Make sure that ExistGV is the one we want to keep!
|
||||||
|
if (!NewGV->isExternal() || !NewGV->use_empty()) {
|
||||||
|
std::swap(NewGV, ExistGV);
|
||||||
|
}
|
||||||
|
|
||||||
// Ok we have two external global values. Make all uses of the new
|
// Ok we have two external global values. Make all uses of the new
|
||||||
// one use the old one...
|
// one use the old one...
|
||||||
//
|
//
|
||||||
assert(ExistGV->use_empty() && "No uses allowed on untyped value!");
|
assert(NewGV->use_empty() && "No uses allowed on untyped value!");
|
||||||
|
|
||||||
|
// We cannot replaceAllUsesWith, because they have different types!
|
||||||
//NewGV->replaceAllUsesWith(ExistGV);
|
//NewGV->replaceAllUsesWith(ExistGV);
|
||||||
|
|
||||||
// Now we just convert it to an unnamed method... which won't get
|
// Now we just convert it to an unnamed method... which won't get
|
||||||
@ -261,10 +271,6 @@ void SymbolTable::refineAbstractType(const DerivedType *OldType,
|
|||||||
else
|
else
|
||||||
M->getGlobalList().remove(cast<GlobalVariable>(NewGV));
|
M->getGlobalList().remove(cast<GlobalVariable>(NewGV));
|
||||||
delete NewGV;
|
delete NewGV;
|
||||||
|
|
||||||
} else {
|
|
||||||
assert(0 && "Two planes folded together with overlapping "
|
|
||||||
"value names!");
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
insertEntry(V.first, NewType, V.second);
|
insertEntry(V.first, NewType, V.second);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user