mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 10:55:58 +08:00
allow-multiple-definitions should completely suppress errors instead of making them warnings.
We found that when you pass --allow-multiple-definitions or `-z muldefs` to GNU linkers, they don't complain about duplicate symbols at all. They don't even print out warnings on it. We emit warnings in that case. If you pass --fatal-warnings, that difference results in a link failure. Differential Revision: https://reviews.llvm.org/D44549 llvm-svn: 327920
This commit is contained in:
@@ -410,20 +410,17 @@ Symbol *SymbolTable::addCommon(StringRef N, uint64_t Size, uint32_t Alignment,
|
||||
return S;
|
||||
}
|
||||
|
||||
static void warnOrError(const Twine &Msg) {
|
||||
if (Config->AllowMultipleDefinition)
|
||||
warn(Msg);
|
||||
else
|
||||
error(Msg);
|
||||
}
|
||||
|
||||
static void reportDuplicate(Symbol *Sym, InputFile *NewFile) {
|
||||
warnOrError("duplicate symbol: " + toString(*Sym) + "\n>>> defined in " +
|
||||
toString(Sym->File) + "\n>>> defined in " + toString(NewFile));
|
||||
if (!Config->AllowMultipleDefinition)
|
||||
error("duplicate symbol: " + toString(*Sym) + "\n>>> defined in " +
|
||||
toString(Sym->File) + "\n>>> defined in " + toString(NewFile));
|
||||
}
|
||||
|
||||
static void reportDuplicate(Symbol *Sym, InputFile *NewFile,
|
||||
InputSectionBase *ErrSec, uint64_t ErrOffset) {
|
||||
if (Config->AllowMultipleDefinition)
|
||||
return;
|
||||
|
||||
Defined *D = cast<Defined>(Sym);
|
||||
if (!D->Section || !ErrSec) {
|
||||
reportDuplicate(Sym, NewFile);
|
||||
@@ -450,7 +447,7 @@ static void reportDuplicate(Symbol *Sym, InputFile *NewFile,
|
||||
if (!Src2.empty())
|
||||
Msg += Src2 + "\n>>> ";
|
||||
Msg += Obj2;
|
||||
warnOrError(Msg);
|
||||
error(Msg);
|
||||
}
|
||||
|
||||
Symbol *SymbolTable::addRegular(StringRef Name, uint8_t StOther, uint8_t Type,
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/allow-multiple-definition.s -o %t2
|
||||
# RUN: not ld.lld %t1 %t2 -o %t3
|
||||
# RUN: not ld.lld --allow-multiple-definition --no-allow-multiple-definition %t1 %t2 -o %t3
|
||||
# RUN: ld.lld --allow-multiple-definition %t1 %t2 -o %t3
|
||||
# RUN: ld.lld --allow-multiple-definition %t2 %t1 -o %t4
|
||||
# RUN: ld.lld --allow-multiple-definition --fatal-warnings %t1 %t2 -o %t3
|
||||
# RUN: ld.lld --allow-multiple-definition --fatal-warnings %t2 %t1 -o %t4
|
||||
# RUN: llvm-objdump -d %t3 | FileCheck %s
|
||||
# RUN: llvm-objdump -d %t4 | FileCheck -check-prefix=REVERT %s
|
||||
|
||||
# RUN: ld.lld -z muldefs %t1 %t2 -o %t3
|
||||
# RUN: ld.lld -z muldefs %t2 %t1 -o %t4
|
||||
# RUN: ld.lld -z muldefs --fatal-warnings %t1 %t2 -o %t3
|
||||
# RUN: ld.lld -z muldefs --fatal-warnings %t2 %t1 -o %t4
|
||||
# RUN: llvm-objdump -d %t3 | FileCheck %s
|
||||
# RUN: llvm-objdump -d %t4 | FileCheck -check-prefix=REVERT %s
|
||||
|
||||
|
||||
Reference in New Issue
Block a user