diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp --- a/llvm/lib/MC/WinCOFFObjectWriter.cpp +++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -353,9 +353,10 @@ return nullptr; const MCSymbol &Aliasee = SymRef->getSymbol(); - if (!Aliasee.isUndefined()) + if (Aliasee.isUndefined() || Aliasee.isExternal()) + return GetOrCreateCOFFSymbol(&Aliasee); + else return nullptr; - return GetOrCreateCOFFSymbol(&Aliasee); } /// This function takes a symbol data object from the assembler diff --git a/llvm/test/MC/COFF/weak.s b/llvm/test/MC/COFF/weak.s --- a/llvm/test/MC/COFF/weak.s +++ b/llvm/test/MC/COFF/weak.s @@ -77,17 +77,7 @@ // CHECK-NEXT: StorageClass: WeakExternal // CHECK-NEXT: AuxSymbolCount: 1 // CHECK-NEXT: AuxWeakExternal { -// CHECK-NEXT: Linked: .weak._test_weak_alias.default +// CHECK-NEXT: Linked: _main // CHECK-NEXT: Search: Alias // CHECK-NEXT: } // CHECK-NEXT: } - -// CHECK: Symbol { -// CHECK: Name: .weak._test_weak_alias.default._main -// CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: .text -// CHECK-NEXT: BaseType: Null -// CHECK-NEXT: ComplexType: Null -// CHECK-NEXT: StorageClass: External -// CHECK-NEXT: AuxSymbolCount: 0 -// CHECK-NEXT: }