diff --git a/lib/LTO/LTOModule.cpp b/lib/LTO/LTOModule.cpp index cffc9aaf7e2..567da04f90c 100644 --- a/lib/LTO/LTOModule.cpp +++ b/lib/LTO/LTOModule.cpp @@ -660,6 +660,7 @@ namespace { void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override { // FIXME: should we handle aliases? markDefined(*Symbol); + AddValueSymbols(Value); } bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override { diff --git a/test/LTO/symver-asm.ll b/test/LTO/symver-asm.ll new file mode 100644 index 00000000000..03dda2bedd9 --- /dev/null +++ b/test/LTO/symver-asm.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s >%t1 +; RUN: llvm-lto -o %t2 %t1 +; RUN: llvm-nm %t2 | FileCheck %s + +target triple = "x86_64-unknown-linux-gnu" + +module asm ".symver io_cancel_0_4,io_cancel@@LIBAIO_0.4" + +; Even without -exported-symbol, io_cancel_0_4 should be noticed by LTOModule's +; RecordStreamer, so it shouldn't get eliminated. However, the object file will +; contain the aliased symver as well as the original. +define i32 @io_cancel_0_4() { +; CHECK: io_cancel@@LIBAIO_0.4 +; CHECK: io_cancel_0_4 + ret i32 0 +}