[lld] 66bd146 - [lld-macho] Demangle symbol names in duplicate-symbol error when -demangle is specified

Vy Nguyen via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 6 12:13:23 PDT 2022


Author: Vy Nguyen
Date: 2022-06-06T15:12:26-04:00
New Revision: 66bd14697b11045462534a84b904d956e93ccf06

URL: https://github.com/llvm/llvm-project/commit/66bd14697b11045462534a84b904d956e93ccf06
DIFF: https://github.com/llvm/llvm-project/commit/66bd14697b11045462534a84b904d956e93ccf06.diff

LOG: [lld-macho] Demangle symbol names in duplicate-symbol error when -demangle is specified

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

Added: 
    

Modified: 
    lld/MachO/SymbolTable.cpp
    lld/test/MachO/invalid/duplicate-symbol.s

Removed: 
    


################################################################################
diff  --git a/lld/MachO/SymbolTable.cpp b/lld/MachO/SymbolTable.cpp
index 113b4dba7f345..b9248e6f381c9 100644
--- a/lld/MachO/SymbolTable.cpp
+++ b/lld/MachO/SymbolTable.cpp
@@ -83,7 +83,7 @@ Defined *SymbolTable::addDefined(StringRef name, InputFile *file,
           concatIsec->symbols.erase(llvm::find(concatIsec->symbols, defined));
         }
       } else {
-        error("duplicate symbol: " + name + "\n>>> defined in " +
+        error("duplicate symbol: " + toString(*defined) + "\n>>> defined in " +
               toString(defined->getFile()) + "\n>>> defined in " +
               toString(file));
       }

diff  --git a/lld/test/MachO/invalid/duplicate-symbol.s b/lld/test/MachO/invalid/duplicate-symbol.s
index fc9fd7614630d..28495baea5cb7 100644
--- a/lld/test/MachO/invalid/duplicate-symbol.s
+++ b/lld/test/MachO/invalid/duplicate-symbol.s
@@ -1,15 +1,17 @@
 # REQUIRES: x86
 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t-dup.o
-# RUN: not %lld -o /dev/null %t-dup.o %t.o 2>&1 | FileCheck %s -DFILE_1=%t-dup.o -DFILE_2=%t.o
-# RUN: not %lld -o /dev/null %t.o %t.o 2>&1 | FileCheck %s -DFILE_1=%t.o -DFILE_2=%t.o
+# RUN: not %lld -dylib -o /dev/null %t-dup.o %t.o 2>&1 | FileCheck %s -DNAME=_ZN1a1bL3fooE -DFILE_1=%t-dup.o -DFILE_2=%t.o
+# RUN: not %lld -dylib -o /dev/null %t.o %t.o 2>&1 | FileCheck %s -DNAME=_ZN1a1bL3fooE -DFILE_1=%t.o -DFILE_2=%t.o
 
-# CHECK:      error: duplicate symbol: _main
+# RUN: not %lld -dylib -demangle -o /dev/null %t-dup.o %t.o 2>&1 | FileCheck %s -DNAME="a::b::foo" -DFILE_1=%t-dup.o -DFILE_2=%t.o
+# RUN: not %lld -dylib -demangle -o /dev/null %t.o %t.o 2>&1 | FileCheck %s -DNAME="a::b::foo" -DFILE_1=%t.o -DFILE_2=%t.o
+
+# CHECK:      error: duplicate symbol: [[NAME]]
 # CHECK-NEXT: >>> defined in [[FILE_1]]
 # CHECK-NEXT: >>> defined in [[FILE_2]]
 
 .text
-.global _main
-_main:
-  mov $0, %rax
+.global _ZN1a1bL3fooE
+_ZN1a1bL3fooE:
   ret


        


More information about the llvm-commits mailing list