diff --git a/lld/test/ELF/stale-profile-error.ll b/lld/test/ELF/stale-profile-error.ll new file mode 100644 --- /dev/null +++ b/lld/test/ELF/stale-profile-error.ll @@ -0,0 +1,24 @@ +; RUN: split-file %s %t +; RUN: llvm-as %t/size1.ll -o %t/size1.bc +; RUN: llvm-as %t/size2.ll -o %t/size2.bc + +; RUN: not ld.lld %t/size1.bc %t/size2.bc -S -o - 2>&1 | FileCheck %s + +; Test module flags error messages. +; CHECK: linking module flags 'foo': IDs have conflicting values in '{{.*}}size2.bc' and 'ld-temp.o' + +;--- size1.ll +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +!0 = !{ i32 1, !"foo", i32 37 } + +!llvm.module.flags = !{ !0 } + +;--- size2.ll +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +!0 = !{ i32 1, !"foo", i32 38 } + +!llvm.module.flags = !{ !0 } diff --git a/llvm/lib/Transforms/IPO/FunctionImport.cpp b/llvm/lib/Transforms/IPO/FunctionImport.cpp --- a/llvm/lib/Transforms/IPO/FunctionImport.cpp +++ b/llvm/lib/Transforms/IPO/FunctionImport.cpp @@ -1373,8 +1373,9 @@ if (Error Err = Mover.move(std::move(SrcModule), GlobalsToImport.getArrayRef(), nullptr, /*IsPerformingImport=*/true)) - report_fatal_error(Twine("Function Import: link error: ") + - toString(std::move(Err))); + return createStringError(errc::invalid_argument, + "Function Import: link error: %s", + toString(std::move(Err)).c_str()); ImportedCount += GlobalsToImport.size(); NumImportedModules++;