]> granicus.if.org Git - clang/commitdiff
Warn that -O4 is the same as -O3.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 27 Aug 2013 16:58:15 +0000 (16:58 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 27 Aug 2013 16:58:15 +0000 (16:58 +0000)
We error on -O5 and higher. While it is tempting to do the same for -O4, I
agree with Jordan Rose: we should warn for a release at least first.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189369 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticDriverKinds.td
include/clang/Driver/Options.td
lib/Driver/Tools.cpp
test/Driver/clang_f_opts.c

index 26d39149e6b0eb140b10726698ad220bd9034b6f..d6187e84687eae3b6bede8831361a3f7e25c377a 100644 (file)
@@ -112,6 +112,7 @@ def err_drv_unknown_objc_runtime : Error<
 def err_drv_emit_llvm_link : Error<
    "-emit-llvm cannot be used when linking">;
 
+def warn_O4_is_O3 : Warning<"-O4 is equivalent to -O3">, InGroup<Deprecated>;
 def warn_c_kext : Warning<
   "ignoring -fapple-kext which is valid for C++ and Objective-C++ only">;
 def warn_drv_input_file_unused : Warning<
index b6ecdcd6a9088326de4643fa9332ed9fa013463e..a9e2f53d2a21bff4bb305ef126c41e5baa4b5ade 100644 (file)
@@ -214,13 +214,13 @@ def MT : JoinedOrSeparate<["-"], "MT">, Group<M_Group>, Flags<[CC1Option]>,
 def Mach : Flag<["-"], "Mach">;
 def M : Flag<["-"], "M">, Group<M_Group>;
 def O0 : Flag<["-"], "O0">, Group<O_Group>, Flags<[CC1Option]>;
+def O4 : Flag<["-"], "O4">, Group<O_Group>, Flags<[CC1Option]>;
 def ObjCXX : Flag<["-"], "ObjC++">, Flags<[DriverOption]>,
   HelpText<"Treat source input files as Objective-C++ inputs">;
 def ObjC : Flag<["-"], "ObjC">, Flags<[DriverOption]>,
   HelpText<"Treat source input files as Objective-C inputs">;
 def O : Joined<["-"], "O">, Group<O_Group>, Flags<[CC1Option]>;
 def O_flag : Flag<["-"], "O">, Flags<[CC1Option]>, Alias<O>, AliasArgs<["2"]>;
-def O4 : Flag<["-"], "O4">, Alias<O>, AliasArgs<["3"]>;
 def Ofast : Joined<["-"], "Ofast">, Group<O_Group>, Flags<[CC1Option]>;
 def P : Flag<["-"], "P">, Flags<[CC1Option]>,
   HelpText<"Disable linemarker output in -E mode">;
index 49deb26e6a59d4623fd0264d9a1edec18f98aef9..645011d10f0847cc60f79d93bb22e8c4505038b7 100644 (file)
@@ -1863,7 +1863,8 @@ static bool isOptimizationLevelFast(const ArgList &Args) {
 /// \brief Vectorize at all optimization levels greater than 1 except for -Oz.
 static bool shouldEnableVectorizerAtOLevel(const ArgList &Args) {
   if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
-    if (A->getOption().matches(options::OPT_Ofast))
+    if (A->getOption().matches(options::OPT_O4) ||
+        A->getOption().matches(options::OPT_Ofast))
       return true;
 
     if (A->getOption().matches(options::OPT_O0))
@@ -2622,8 +2623,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   // preprocessed inputs and configure concludes that -fPIC is not supported.
   Args.ClaimAllArgs(options::OPT_D);
 
-  if (Arg *A = Args.getLastArg(options::OPT_O_Group))
-    A->render(Args, CmdArgs);
+  // Manually translate -O4 to -O3; let clang reject others.
+  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+    if (A->getOption().matches(options::OPT_O4)) {
+      CmdArgs.push_back("-O3");
+      D.Diag(diag::warn_O4_is_O3);
+    } else {
+      A->render(Args, CmdArgs);
+    }
+  }
 
   // Don't warn about unused -flto.  This can happen when we're preprocessing or
   // precompiling.
index 52db4a2d20df2b0c12df53fb343a41888ed5e572..0cf4cc910b2c6b4ccc3e0cfba9e0304ad2832f7b 100644 (file)
@@ -97,4 +97,5 @@
 // CHECK-NO-M-PASCAL-STRINGS-NOT: "-fpascal-strings"
 
 // RUN: %clang -### -S -O4 %s 2>&1 | FileCheck -check-prefix=CHECK-MAX-O %s
+// CHECK-MAX-O: warning: -O4 is equivalent to -O3
 // CHECK-MAX-O: -O3