From c8e56f394af0b9e32c413d62a0e7aebbba3e6b70 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Thu, 25 Mar 2021 14:40:17 -0700 Subject: [PATCH] Add -disable-verify flag to llvm-link. This flag allows the developer to see the result of linking even if it fails the verifier, as a step in debugging cases where the linked module fails the verifier. Differential Revision: https://reviews.llvm.org/D99382 --- llvm/tools/llvm-link/llvm-link.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp index b01270d..846532e 100644 --- a/llvm/tools/llvm-link/llvm-link.cpp +++ b/llvm/tools/llvm-link/llvm-link.cpp @@ -110,6 +110,9 @@ static cl::opt PreserveAssemblyUseListOrder( cl::desc("Preserve use-list order when writing LLVM assembly."), cl::init(false), cl::Hidden); +static cl::opt NoVerify("disable-verify", + cl::desc("Do not run the verifier"), cl::Hidden); + static ExitOnError ExitOnErr; // Read the specified bitcode file in and return it. This routine searches the @@ -311,7 +314,7 @@ static bool importFunctions(const char *argv0, Module &DestModule) { // Load the specified source module. auto &SrcModule = ModuleLoaderCache(argv0, FileName); - if (verifyModule(SrcModule, &errs())) { + if (!NoVerify && verifyModule(SrcModule, &errs())) { errs() << argv0 << ": " << FileName; WithColor::error() << "input module is broken!\n"; return false; @@ -372,7 +375,7 @@ static bool linkFiles(const char *argv0, LLVMContext &Context, Linker &L, // Note that when ODR merging types cannot verify input files in here When // doing that debug metadata in the src module might already be pointing to // the destination. - if (DisableDITypeMap && verifyModule(*M, &errs())) { + if (DisableDITypeMap && !NoVerify && verifyModule(*M, &errs())) { errs() << argv0 << ": " << File << ": "; WithColor::error() << "input module is broken!\n"; return false; @@ -471,7 +474,7 @@ int main(int argc, char **argv) { return 1; } - if (verifyModule(*Composite, &errs())) { + if (!NoVerify && verifyModule(*Composite, &errs())) { errs() << argv[0] << ": "; WithColor::error() << "linked module is broken!\n"; return 1; -- 2.7.4