mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 14:10:41 +00:00
Compare DataLayout by Value, not by pointer.
This fixes spurious warnings in llvm-link about the datalayout not matching. Thanks to Zalman Stern for reporting the bug! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e3561972d4
commit
c4bdb93d6a
@ -193,6 +193,9 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const DataLayout &Other) const;
|
||||
bool operator!=(const DataLayout &Other) const { return !(*this == Other); }
|
||||
|
||||
~DataLayout(); // Not virtual, do not subclass this class
|
||||
|
||||
/// Parse a data layout string (with fallback to default values).
|
||||
|
@ -354,6 +354,16 @@ DataLayout::DataLayout(const Module *M) : LayoutMap(0) {
|
||||
reset("");
|
||||
}
|
||||
|
||||
bool DataLayout::operator==(const DataLayout &Other) const {
|
||||
bool Ret = LittleEndian == Other.LittleEndian &&
|
||||
StackNaturalAlign == Other.StackNaturalAlign &&
|
||||
ManglingMode == Other.ManglingMode &&
|
||||
LegalIntWidths == Other.LegalIntWidths &&
|
||||
Alignments == Other.Alignments && Pointers == Pointers;
|
||||
assert(Ret == (getStringRepresentation() == Other.getStringRepresentation()));
|
||||
return Ret;
|
||||
}
|
||||
|
||||
void
|
||||
DataLayout::setAlignment(AlignTypeEnum align_type, unsigned abi_align,
|
||||
unsigned pref_align, uint32_t bit_width) {
|
||||
|
@ -1208,7 +1208,7 @@ bool ModuleLinker::run() {
|
||||
DstM->setTargetTriple(SrcM->getTargetTriple());
|
||||
|
||||
if (SrcM->getDataLayout() && DstM->getDataLayout() &&
|
||||
SrcM->getDataLayout() != DstM->getDataLayout()) {
|
||||
*SrcM->getDataLayout() != *DstM->getDataLayout()) {
|
||||
if (!SuppressWarnings) {
|
||||
errs() << "WARNING: Linking two modules of different data layouts!\n";
|
||||
}
|
||||
|
1
test/Linker/Inputs/datalayout-a.ll
Normal file
1
test/Linker/Inputs/datalayout-a.ll
Normal file
@ -0,0 +1 @@
|
||||
target datalayout = "e"
|
1
test/Linker/Inputs/datalayout-b.ll
Normal file
1
test/Linker/Inputs/datalayout-b.ll
Normal file
@ -0,0 +1 @@
|
||||
target datalayout = "E"
|
14
test/Linker/datalayout.ll
Normal file
14
test/Linker/datalayout.ll
Normal file
@ -0,0 +1,14 @@
|
||||
; RUN: llvm-link %s %S/Inputs/datalayout-a.ll -S -o - 2>%t.a.err | FileCheck %s
|
||||
; RUN: cat %t.a.err | not FileCheck %s 2>&1 | FileCheck --check-prefix=WARN-A %s
|
||||
|
||||
; RUN: llvm-link %s %S/Inputs/datalayout-b.ll -S -o - 2>%t.b.err | FileCheck %s
|
||||
; RUN: cat %t.b.err | FileCheck --check-prefix=WARN-B %s
|
||||
|
||||
target datalayout = "e"
|
||||
|
||||
; CHECK: target datalayout = "e"
|
||||
|
||||
; this is a hack to check that llvm-link printed no warnings.
|
||||
; WARN-A: FileCheck error: '-' is empty.
|
||||
|
||||
; WARN-B: WARNING: Linking two modules of different data layouts!
|
Loading…
Reference in New Issue
Block a user