COFF: Implement SymbolBody::getDebugName() for DefinedBitcode symbols.

Differential Revision: http://reviews.llvm.org/D10827

llvm-svn: 241029
This commit is contained in:
Peter Collingbourne 2015-06-30 00:47:52 +00:00
parent 71784d611d
commit f7b27d15f2
5 changed files with 21 additions and 4 deletions

View File

@ -291,7 +291,8 @@ std::error_code BitcodeFile::parse() {
} else {
bool Replaceable = (SymbolDef == LTO_SYMBOL_DEFINITION_TENTATIVE ||
(Attrs & LTO_SYMBOL_COMDAT));
SymbolBodies.push_back(new (Alloc) DefinedBitcode(SymName, Replaceable));
SymbolBodies.push_back(new (Alloc) DefinedBitcode(this, SymName,
Replaceable));
}
}

View File

@ -138,6 +138,9 @@ std::string SymbolBody::getDebugName() {
if (auto *D = dyn_cast<DefinedCOFF>(this)) {
N += " ";
N += D->File->getShortName();
} else if (auto *D = dyn_cast<DefinedBitcode>(this)) {
N += " ";
N += D->File->getShortName();
}
return N;
}

View File

@ -28,6 +28,7 @@ using llvm::object::coff_import_header;
using llvm::object::coff_symbol_generic;
class ArchiveFile;
class BitcodeFile;
class InputFile;
class ObjectFile;
class SymbolBody;
@ -334,15 +335,19 @@ private:
};
class DefinedBitcode : public Defined {
friend SymbolBody;
public:
DefinedBitcode(StringRef N, bool IsReplaceable)
: Defined(DefinedBitcodeKind, N) {
DefinedBitcode(BitcodeFile *F, StringRef N, bool IsReplaceable)
: Defined(DefinedBitcodeKind, N), File(F) {
this->IsReplaceable = IsReplaceable;
}
static bool classof(const SymbolBody *S) {
return S->kind() == DefinedBitcodeKind;
}
private:
BitcodeFile *File;
};
} // namespace coff

View File

@ -0,0 +1,3 @@
define void @foo() {
ret void
}

View File

@ -3,7 +3,12 @@
# RUN: not lld -flavor link2 /out:%t.exe %t1.obj %t2.obj >& %t.log
# RUN: FileCheck %s < %t.log
# CHECK: duplicate symbol: foo {{.+}} and foo {{.+}}
# RUN: llvm-as -o %t.lto1.obj %S/Inputs/conflict.ll
# RUN: llvm-as -o %t.lto2.obj %S/Inputs/conflict.ll
# RUN: not lld -flavor link2 /out:%t.exe %t.lto1.obj %t.lto2.obj >& %t.log
# RUN: FileCheck %s < %t.log
# CHECK: duplicate symbol: foo {{.+}}1.obj and foo {{.+}}2.obj
---
header: