Index: llvm/lib/MC/WinCOFFObjectWriter.cpp =================================================================== --- llvm/lib/MC/WinCOFFObjectWriter.cpp +++ llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -411,6 +411,11 @@ Local->Data.StorageClass = IsExternal ? COFF::IMAGE_SYM_CLASS_EXTERNAL : COFF::IMAGE_SYM_CLASS_STATIC; } + // If the original symbol was weak, and we created a new default + // symbol here, make it static, in order to not conflict with similar + // default symbols for the same weak in other translation units. + if (SymbolCOFF.isWeakExternal()) + Local->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC; } Sym->MC = &MCSym; Index: llvm/test/MC/COFF/weak-alias-local.s =================================================================== --- llvm/test/MC/COFF/weak-alias-local.s +++ llvm/test/MC/COFF/weak-alias-local.s @@ -38,6 +38,6 @@ // CHECK-NEXT: Section: .data (2) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) -// CHECK-NEXT: StorageClass: External (0x2) +// CHECK-NEXT: StorageClass: Static (0x3) // CHECK-NEXT: AuxSymbolCount: 0 // CHECK-NEXT: } Index: llvm/test/MC/COFF/weak-val.s =================================================================== --- llvm/test/MC/COFF/weak-val.s +++ llvm/test/MC/COFF/weak-val.s @@ -28,6 +28,6 @@ // CHECK-NEXT: Section: .data (2) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) -// CHECK-NEXT: StorageClass: External (0x2) +// CHECK-NEXT: StorageClass: Static (0x3) // CHECK-NEXT: AuxSymbolCount: 0 // CHECK-NEXT: } Index: llvm/test/MC/COFF/weak.s =================================================================== --- llvm/test/MC/COFF/weak.s +++ llvm/test/MC/COFF/weak.s @@ -64,7 +64,7 @@ // CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null -// CHECK-NEXT: StorageClass: External +// CHECK-NEXT: StorageClass: Static // CHECK-NEXT: AuxSymbolCount: 0 // CHECK-NEXT: } @@ -88,6 +88,6 @@ // CHECK-NEXT: Section: .text // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null -// CHECK-NEXT: StorageClass: External +// CHECK-NEXT: StorageClass: Static // CHECK-NEXT: AuxSymbolCount: 0 // CHECK-NEXT: }