summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-04-03 02:41:15 +0000
committerDavide Italiano <davide@freebsd.org>2016-04-03 02:41:15 +0000
commit8848d44e466681d81a5868d240cbb001b59a26e6 (patch)
treeb68685692721b344c5a24bb137cbd985c6cf2156
parent887d76c392998d3948d3157aa902c565b0e389f8 (diff)
downloadbcm5719-llvm-8848d44e466681d81a5868d240cbb001b59a26e6.tar.gz
bcm5719-llvm-8848d44e466681d81a5868d240cbb001b59a26e6.zip
[LTO] Reject invalid optimization levels.
llvm-svn: 265255
-rw-r--r--lld/ELF/Driver.cpp2
-rw-r--r--lld/test/ELF/lto/opt-level.ll5
2 files changed, 7 insertions, 0 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index e828700a97e..de3f12cc51a 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -301,6 +301,8 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Config->Optimize = getInteger(Args, OPT_O, 0);
Config->LtoO = getInteger(Args, OPT_lto_O, 2);
+ if (Config->LtoO > 3)
+ error("invalid optimization level for LTO: " + getString(Args, OPT_lto_O));
Config->ZExecStack = hasZOption(Args, "execstack");
Config->ZNodelete = hasZOption(Args, "nodelete");
diff --git a/lld/test/ELF/lto/opt-level.ll b/lld/test/ELF/lto/opt-level.ll
index c52588edf5d..e810fc93f9d 100644
--- a/lld/test/ELF/lto/opt-level.ll
+++ b/lld/test/ELF/lto/opt-level.ll
@@ -6,6 +6,11 @@
; RUN: ld.lld -o %t2a -m elf_x86_64 -e main %t.o
; RUN: llvm-nm %t2a | FileCheck --check-prefix=CHECK-O2 %s
+; Reject invalid optimization levels.
+; RUN: not ld.lld -o %t3 -m elf_x86_64 -e main --lto-O6 %t.o 2>&1 | \
+; RUN: FileCheck --check-prefix=INVALID %s
+; INVALID: invalid optimization level for LTO: 6
+
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
OpenPOWER on IntegriCloud