[LTO] Print conflicting operands between Src and Dest modules (#115104)

The current error message doesn't give sufficient details to help with
debugging. This patch will log the operand values that are conflicting.

After this patch the output is of the form:
```
'Large Data Threshold': IDs have conflicting values: 'i32 101' from /usr/local/home/llvm-project/build/test/LTO/X86/Output/largedatathreshold-3.ll.tmp1.o, and 'i32 100' from ld-temp.o
```
This commit is contained in:
AdityaK
2024-11-21 10:07:39 -08:00
committed by GitHub
parent b22c3c1e88
commit 391bf068f2
5 changed files with 13 additions and 9 deletions

View File

@@ -1430,11 +1430,15 @@ Error IRLinker::linkModuleFlagsMetadata() {
llvm_unreachable("not possible");
case Module::Error: {
// Emit an error if the values differ.
if (SrcOp->getOperand(2) != DstOp->getOperand(2))
return stringErr("linking module flags '" + ID->getString() +
"': IDs have conflicting values in '" +
SrcM->getModuleIdentifier() + "' and '" +
DstM.getModuleIdentifier() + "'");
if (SrcOp->getOperand(2) != DstOp->getOperand(2)) {
std::string Str;
raw_string_ostream(Str)
<< "linking module flags '" << ID->getString()
<< "': IDs have conflicting values: '" << *SrcOp->getOperand(2)
<< "' from " << SrcM->getModuleIdentifier() << ", and '"
<< *DstOp->getOperand(2) << "' from " + DstM.getModuleIdentifier();
return stringErr(Str);
}
continue;
}
case Module::Warning: {

View File

@@ -18,4 +18,4 @@ entry:
ret ptr @data
}
; CHECK: 'Code Model': IDs have conflicting values
; CHECK: 'Code Model': IDs have conflicting values: 'i32 1' from {{.*}}, and 'i32 4' from {{.*}}

View File

@@ -3,7 +3,7 @@
; RUN: not llvm-lto2 run -r %t0.o,_start,px -r %t1.o,bar,px -r %t0.o,_GLOBAL_OFFSET_TABLE_, \
; RUN: -r %t1.o,_GLOBAL_OFFSET_TABLE_, %t0.o %t1.o -o %t2.s 2>&1 | FileCheck %s
; CHECK: 'Large Data Threshold': IDs have conflicting values
; CHECK: 'Large Data Threshold': IDs have conflicting values: 'i32 101' from {{.*}}, and 'i32 100' from {{.*}}
target triple = "x86_64-unknown-linux-gnu"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

View File

@@ -2,7 +2,7 @@
; Test module flags error messages.
; CHECK: linking module flags 'foo': IDs have conflicting values in '{{.*}}module-flags-6-b.ll' and 'llvm-link'
; CHECK: linking module flags 'foo': IDs have conflicting values: 'i32 38' from {{.*}}module-flags-6-b.ll, and 'i32 37' from llvm-link
!0 = !{ i32 1, !"foo", i32 37 }

View File

@@ -4,7 +4,7 @@
; RUN: llvm-lto -thinlto -o 3 1.bc 2.bc
; RUN: opt -S -passes=function-import -summary-file 3.thinlto.bc 1.bc 2>&1 | FileCheck %s
; CHECK: Function Import: link error: linking module flags 'Error': IDs have conflicting values in '2.bc' and '1.bc'
; CHECK: Function Import: link error: linking module flags 'Error': IDs have conflicting values: 'i32 1' from 2.bc, and 'i32 0' from 1.bc
;--- 1.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"