diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp index 48b746a22fcf..b304bfc401aa 100644 --- a/llvm/lib/Linker/IRMover.cpp +++ b/llvm/lib/Linker/IRMover.cpp @@ -1230,8 +1230,14 @@ Error IRLinker::linkModuleFlagsMetadata() { case Module::Warning: { // Emit a warning if the values differ. if (SrcOp->getOperand(2) != DstOp->getOperand(2)) { - emitWarning("linking module flags '" + ID->getString() + - "': IDs have conflicting values"); + std::string str; + raw_string_ostream(str) + << "linking module flags '" << ID->getString() + << "': IDs have conflicting values ('" << *SrcOp->getOperand(2) + << "' from " << SrcM->getModuleIdentifier() << " with '" + << *DstOp->getOperand(2) << "' from " << DstM.getModuleIdentifier() + << ')'; + emitWarning(str); } continue; } diff --git a/llvm/test/Linker/Inputs/metadata-mismatch-a.ll b/llvm/test/Linker/Inputs/metadata-mismatch-a.ll new file mode 100644 index 000000000000..742ae5ca3ef0 --- /dev/null +++ b/llvm/test/Linker/Inputs/metadata-mismatch-a.ll @@ -0,0 +1,3 @@ + +!llvm.module.flags = !{!1} +!1 = !{i32 2, !"Dwarf Version", i32 4} diff --git a/llvm/test/Linker/Inputs/metadata-mismatch-b.ll b/llvm/test/Linker/Inputs/metadata-mismatch-b.ll new file mode 100644 index 000000000000..198c479c9818 --- /dev/null +++ b/llvm/test/Linker/Inputs/metadata-mismatch-b.ll @@ -0,0 +1,2 @@ +!llvm.module.flags = !{!1} +!1 = !{i32 2, !"Dwarf Version", i32 5} diff --git a/llvm/test/Linker/metadata-mismatch.test b/llvm/test/Linker/metadata-mismatch.test new file mode 100644 index 000000000000..9767f8d2e4cf --- /dev/null +++ b/llvm/test/Linker/metadata-mismatch.test @@ -0,0 +1,3 @@ +; RUN: llvm-link %p/Inputs/metadata-mismatch-a.ll %p/Inputs/metadata-mismatch-b.ll -S 2>&1 | FileCheck %s + +; CHECK: warning: linking module flags 'Dwarf Version': IDs have conflicting values ('i32 5' from {{.*}}/metadata-mismatch-b.ll with 'i32 4' from llvm-link)