diff options
| -rw-r--r-- | lld/ELF/Config.h | 1 | ||||
| -rw-r--r-- | lld/ELF/Driver.cpp | 1 | ||||
| -rw-r--r-- | lld/ELF/LTO.cpp | 3 | ||||
| -rw-r--r-- | lld/ELF/Options.td | 1 | ||||
| -rw-r--r-- | lld/test/ELF/lto/verify-invalid.ll | 14 |
5 files changed, 18 insertions, 2 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index ff18e6b1cee..ea94f88f2ba 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -56,6 +56,7 @@ struct Configuration { bool BsymbolicFunctions; bool BuildId; bool Demangle = true; + bool DisableVerify; bool DiscardAll; bool DiscardLocals; bool DiscardNone; diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index de3f12cc51a..ab1098d34e6 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -270,6 +270,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { Config->BsymbolicFunctions = Args.hasArg(OPT_Bsymbolic_functions); Config->BuildId = Args.hasArg(OPT_build_id); Config->Demangle = !Args.hasArg(OPT_no_demangle); + Config->DisableVerify = Args.hasArg(OPT_disable_verify); Config->DiscardAll = Args.hasArg(OPT_discard_all); Config->DiscardLocals = Args.hasArg(OPT_discard_locals); Config->DiscardNone = Args.hasArg(OPT_discard_none); diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 180236c475f..a9196567c4c 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -59,8 +59,7 @@ static void runLTOPasses(Module &M, TargetMachine &TM) { PassManagerBuilder PMB; PMB.LibraryInfo = new TargetLibraryInfoImpl(Triple(TM.getTargetTriple())); PMB.Inliner = createFunctionInliningPass(); - PMB.VerifyInput = true; - PMB.VerifyOutput = true; + PMB.VerifyInput = PMB.VerifyOutput = !Config->DisableVerify; PMB.LoopVectorize = true; PMB.SLPVectorize = true; PMB.OptLevel = Config->LtoO; diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td index 951ad85d969..98eef79b8cc 100644 --- a/lld/ELF/Options.td +++ b/lld/ELF/Options.td @@ -217,5 +217,6 @@ def G : Separate<["-"], "G">; def alias_version_script_version_script : Joined<["--"], "version-script=">, Alias<version_script>; // Debugging/developer options +def disable_verify : Flag<["-"], "disable-verify">; def save_temps : Flag<["-"], "save-temps">; def mllvm : Separate<["-"], "mllvm">; diff --git a/lld/test/ELF/lto/verify-invalid.ll b/lld/test/ELF/lto/verify-invalid.ll new file mode 100644 index 00000000000..41948c39b89 --- /dev/null +++ b/lld/test/ELF/lto/verify-invalid.ll @@ -0,0 +1,14 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: not ld.lld -m elf_x86_64 %t.o -o %t2 -mllvm -disable-verify \ +; RUN: -debug-pass=Arguments 2>&1 | FileCheck %s + +target triple = "x86_64-unknown-linux-gnu" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +define void @_start() { + ret void +} + +; -disable-verify should disable the verification of bitcode. +; CHECK-NOT: Pass Arguments: {{.*}} -verify {{.*}} -verify |

