diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -592,7 +592,7 @@ if (wasInserted || isa(s) || s->isLazy()) replaceSymbol(s, n, sym); else if (auto *da = dyn_cast(s)) { - if (!da->isEqual(sym)) + if (da->getVA() != sym.getValue()) reportDuplicate(s, nullptr); } else if (!isa(s)) reportDuplicate(s, nullptr); @@ -607,7 +607,7 @@ if (wasInserted || isa(s) || s->isLazy()) replaceSymbol(s, n, va); else if (auto *da = dyn_cast(s)) { - if (!da->isEqual(va)) + if (da->getVA() != va) reportDuplicate(s, nullptr); } else if (!isa(s)) reportDuplicate(s, nullptr); diff --git a/lld/COFF/Symbols.h b/lld/COFF/Symbols.h --- a/lld/COFF/Symbols.h +++ b/lld/COFF/Symbols.h @@ -228,14 +228,7 @@ uint64_t getRVA() { return va - config->imageBase; } void setVA(uint64_t v) { va = v; } - - bool isEqual(COFFSymbolRef s) const { - return va == s.getValue(); - } - - bool isEqual(uint64_t otherVa) const { - return va == otherVa; - } + uint64_t getVA() const { return va; } // Section index relocations against absolute symbols resolve to // this 16 bit number, and it is the largest valid section index diff --git a/lld/test/COFF/duplicate-absolute-same.s b/lld/test/COFF/duplicate-absolute-same.s --- a/lld/test/COFF/duplicate-absolute-same.s +++ b/lld/test/COFF/duplicate-absolute-same.s @@ -2,9 +2,9 @@ // RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.obj %s // RUN: echo -e ".globl myabsolute\nmyabsolute = 0" > %t.dupl.s // RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.dupl.obj %t.dupl.s -// RUN: lld-link /out:%t.exe %t.obj %t.dupl.obj -subsystem:console -entry:entry 2>&1 | FileCheck --allow-empty %s +// RUN: lld-link /out:%t.exe %t.obj %t.dupl.obj -subsystem:console -entry:entry 2>&1 | count 0 -// CHECK-NOT: error: duplicate symbol: myabsolute +// This shouldn't produce any duplicate symbol error. .globl myabsolute myabsolute = 0