summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Config.h1
-rw-r--r--lld/ELF/Driver.cpp1
-rw-r--r--lld/ELF/LTO.cpp3
-rw-r--r--lld/ELF/Options.td1
-rw-r--r--lld/test/ELF/lto/verify-invalid.ll14
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
OpenPOWER on IntegriCloud