Fix llvm-extract so that it changes the linkage of all GlobalValues to

"external" even when doing lazy bitcode loading.  This was broken because
a function that is not materialized fails the !isDeclaration() test.

llvm-svn: 114666
This commit is contained in:
Bob Wilson 2010-09-23 17:25:06 +00:00
parent d5f4130ffb
commit 3aecb15f0a
2 changed files with 20 additions and 17 deletions

View File

@ -50,22 +50,20 @@ namespace {
// Visit the GlobalVariables.
for (Module::global_iterator I = M.global_begin(), E = M.global_end();
I != E; ++I)
if (!I->isDeclaration()) {
I != E; ++I) {
if (I->hasLocalLinkage())
I->setVisibility(GlobalValue::HiddenVisibility);
I->setLinkage(GlobalValue::ExternalLinkage);
if (deleteStuff == (bool)Named.count(I))
if (deleteStuff == (bool)Named.count(I) && !I->isDeclaration())
I->setInitializer(0);
}
// Visit the Functions.
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
if (!I->isDeclaration()) {
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
if (I->hasLocalLinkage())
I->setVisibility(GlobalValue::HiddenVisibility);
I->setLinkage(GlobalValue::ExternalLinkage);
if (deleteStuff == (bool)Named.count(I))
if (deleteStuff == (bool)Named.count(I) && !I->isDeclaration())
I->deleteBody();
}

View File

@ -10,13 +10,18 @@
; CHECK: define void @foo() {
; CHECK: ret void
; CHECK: }
; The linkonce_odr linkage for foo() should be changed to external linkage.
; DELETE: declare void @foo()
; DELETE: define void @bar() {
; DELETE: call void @foo()
; DELETE: ret void
; DELETE: }
define void @foo() {
define linkonce_odr void @foo() {
ret void
}
define void @bar() {
call void @foo()
ret void
}