Index: llvm/trunk/lib/Object/RecordStreamer.cpp =================================================================== --- llvm/trunk/lib/Object/RecordStreamer.cpp +++ llvm/trunk/lib/Object/RecordStreamer.cpp @@ -216,7 +216,10 @@ // 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: llvm/trunk/test/LTO/X86/symver-asm3.ll =================================================================== --- llvm/trunk/test/LTO/X86/symver-asm3.ll +++ llvm/trunk/test/LTO/X86/symver-asm3.ll @@ -12,9 +12,11 @@ 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 @@ ; 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