Index: llvm/lib/Transforms/IPO/FunctionImport.cpp =================================================================== --- llvm/lib/Transforms/IPO/FunctionImport.cpp +++ llvm/lib/Transforms/IPO/FunctionImport.cpp @@ -470,17 +470,14 @@ while (!Worklist.empty()) { auto VI = Worklist.pop_back_val(); for (auto &Summary : VI.getSummaryList()) { - for (auto Ref : Summary->refs()) + GlobalValueSummary *Base = Summary.get(); + if (auto *AS = dyn_cast(Base)) + Base = &AS->getAliasee(); + for (auto Ref : Base->refs()) visit(Ref); - if (auto *FS = dyn_cast(Summary.get())) + if (auto *FS = dyn_cast(Base)) for (auto Call : FS->calls()) visit(Call.first); - if (auto *AS = dyn_cast(Summary.get())) { - auto AliaseeGUID = AS->getAliasee().getOriginalName(); - ValueInfo AliaseeVI = Index.getValueInfo(AliaseeGUID); - if (AliaseeVI) - visit(AliaseeVI); - } } } Index.setWithGlobalValueDeadStripping(); Index: llvm/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll =================================================================== --- /dev/null +++ llvm/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll @@ -0,0 +1,4 @@ +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@external = global i8 42 Index: llvm/test/LTO/Resolution/X86/dead-strip-alias.ll =================================================================== --- /dev/null +++ llvm/test/LTO/Resolution/X86/dead-strip-alias.ll @@ -0,0 +1,20 @@ +; RUN: opt -module-summary -o %t %s +; RUN: opt -module-summary -o %t2 %S/Inputs/dead-strip-alias.ll +; RUN: llvm-lto2 run %t -r %t,main,px -r %t,alias,p -r %t,external, \ +; RUN: %t2 -r %t2,external,p \ +; RUN: -save-temps -o %t3 +; RUN: llvm-nm %t3.1 | FileCheck %s + +; CHECK: D external + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@alias = alias i8*, i8** @internal + +@internal = internal global i8* @external +@external = external global i8 + +define i8** @main() { + ret i8** @alias +}