[opt] Error on `opt -O# --foo-pass`
authorArthur Eubanks <aeubanks@google.com>
Mon, 9 May 2022 00:22:11 +0000 (17:22 -0700)
committerArthur Eubanks <aeubanks@google.com>
Mon, 9 May 2022 16:53:24 +0000 (09:53 -0700)
Matches the error message we emit with `-opt -O# --passes=foo`.
Otherwise we crash later on.

Makes #55320 much less confusing.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D125196

llvm/test/Other/opt-On.ll
llvm/tools/opt/opt.cpp

index 4bbbd0f..c0e6169 100644 (file)
@@ -1,5 +1,6 @@
 ; RUN: not opt -O1 -O2 < %s 2>&1 | FileCheck %s --check-prefix=MULTIPLE
 ; RUN: not opt -O1 -passes='no-op-module' < %s 2>&1 | FileCheck %s --check-prefix=BOTH
+; RUN: not opt -O1 --gvn < %s 2>&1 | FileCheck %s --check-prefix=BOTH
 ; RUN: opt -O0 < %s -S 2>&1 | FileCheck %s --check-prefix=OPT
 ; RUN: opt -O1 < %s -S 2>&1 | FileCheck %s --check-prefix=OPT
 ; RUN: opt -O2 < %s -S 2>&1 | FileCheck %s --check-prefix=OPT
index 2b3b392..bd4738d 100644 (file)
@@ -780,8 +780,9 @@ int main(int argc, char **argv) {
       errs() << "Cannot specify multiple -O#\n";
       return 1;
     }
-    if (NumOLevel > 0 && PassPipeline.getNumOccurrences() > 0) {
-      errs() << "Cannot specify -O# and --passes=, use "
+    if (NumOLevel > 0 &&
+        (PassPipeline.getNumOccurrences() > 0 || PassList.size() > 0)) {
+      errs() << "Cannot specify -O# and --passes=/--foo-pass, use "
                 "-passes='default<O#>,other-pass'\n";
       return 1;
     }