Object: Don't mark alias unconditionally defined
authorVitaly Buka <vitalybuka@google.com>
Tue, 10 Apr 2018 00:53:16 +0000 (00:53 +0000)
committerVitaly Buka <vitalybuka@google.com>
Tue, 10 Apr 2018 00:53:16 +0000 (00:53 +0000)
Summary:
Can't remove EmitAssignment override as llvm/test/Object/X86/nm-bitcodeweak.test
expects this behavior.

Reviewers: pcc, espindola

Subscribers: mehdi_amini, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D44596

llvm-svn: 329651

llvm/lib/Object/RecordStreamer.cpp
llvm/test/LTO/X86/symver-asm3.ll

index 7413090..21577bb 100644 (file)
@@ -216,7 +216,10 @@ void RecordStreamer::flushSymverDirectives() {
       // TODO: Handle "@@@". Depending on SymbolAttribute value it needs to be
       // converted into @ or @@.
       const MCExpr *Value = MCSymbolRefExpr::create(Aliasee, getContext());
-      EmitAssignment(Alias, Value);
+      if (IsDefined)
+        markDefined(*Alias);
+      // Don't use EmitAssignment override as it always marks alias as defined.
+      MCStreamer::EmitAssignment(Alias, Value);
       if (Attr != MCSA_Invalid)
         EmitSymbolAttribute(Alias, Attr);
     }
index 90cee28..0ae8f88 100644 (file)
@@ -12,9 +12,11 @@ module asm "foo1:"
 module asm ".symver foo1, foo@@@VER1"
 ; CHECK-DAG: t foo@@VER1
 
+module asm ".global foo2"
 module asm ".symver foo2, foo@@@VER2"
 ; CHECK-DAG: U foo2
-; CHECK-DAG: t foo@VER2
+; CHECK-DAG: U foo@VER2
+module asm "call foo2"
 
 module asm ".symver foo3, foo@@@VER3"
 ; CHECK-DAG: t foo@@VER3
@@ -23,7 +25,7 @@ module asm ".symver foo4, foo@@@VER4"
 ; CHECK-DAG: T foo@@VER4
 
 module asm ".symver foo5, foo@@@VER5"
-; CHECK-DAG: T foo@VER5
+; CHECK-DAG: U foo@VER5
 
 module asm "foo3:"
 ; CHECK-DAG: t foo3