<div dir="ltr">Straw man: <a href="http://reviews.llvm.org/D4636">http://reviews.llvm.org/D4636</a><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jul 22, 2014 at 3:30 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">What do you think about -Wignored-optimization-flag? Maybe -Wignored-optimization-argument for consistency with -Winvalid-command-line-argument?</div>
<div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">
On Tue, Jul 22, 2014 at 3:07 PM, Nick Lewycky <span dir="ltr"><<a href="mailto:nlewycky@google.com" target="_blank">nlewycky@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">Hi! I'd appreciate if we had the ability to turn off warnings about unknown optimization flags without turning off warnings for other unknown flags. Could you move these into a more specific warning flag under Winvalid-command-line?</div>

<div><div>

<div class="gmail_extra"><br><br><div class="gmail_quote">On 18 July 2014 04:39, Arthur Marble <span dir="ltr"><<a href="mailto:arthur@info9.net" target="_blank">arthur@info9.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



Author: bubbles231<br>
Date: Fri Jul 18 06:38:58 2014<br>
New Revision: 213365<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=213365&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=213365&view=rev</a><br>
Log:<br>
Moved 25 flags to clang_ignored_gcc_optimization_f_Group. Will display a warning<br>
to the user if they try to pass those optimizations. The revision for this patch<br>
is here: <a href="http://reviews.llvm.org/D4474" target="_blank">http://reviews.llvm.org/D4474</a>. This patch will fix many errors in the<br>
rebuild of Debian with clang. Here is a link to the page for unknown arguments:<br>
<a href="http://clang.debian.net/status.php?version=3.4.2&key=UNKNOWN_ARG" target="_blank">http://clang.debian.net/status.php?version=3.4.2&key=UNKNOWN_ARG</a><br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Driver/Options.td<br>
    cfe/trunk/test/Driver/clang_f_opts.c<br>
<br>
Modified: cfe/trunk/include/clang/Driver/Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=213365&r1=213364&r2=213365&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=213365&r1=213364&r2=213365&view=diff</a><br>




==============================================================================<br>
--- cfe/trunk/include/clang/Driver/Options.td (original)<br>
+++ cfe/trunk/include/clang/Driver/Options.td Fri Jul 18 06:38:58 2014<br>
@@ -475,11 +475,11 @@ def fencoding_EQ : Joined<["-"], "fencod<br>
 def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>;<br>
 def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Enable support for exception handling">;<br>
-def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_f_Group>;<br>
-def : Flag<["-"], "fno-expensive-optimizations">, Group<clang_ignored_f_Group>;<br>
+def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+def : Flag<["-"], "fno-expensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 def fextdirs_EQ : Joined<["-"], "fextdirs=">, Group<f_Group>;<br>
-def : Flag<["-"], "fdefer-pop">, Group<clang_ignored_f_Group>;<br>
-def : Flag<["-"], "fno-defer-pop">, Group<clang_ignored_f_Group>;<br>
+def : Flag<["-"], "fdefer-pop">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+def : Flag<["-"], "fno-defer-pop">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 def : Flag<["-"], "fextended-identifiers">, Group<clang_ignored_f_Group>;<br>
 def : Flag<["-"], "fno-extended-identifiers">, Group<f_Group>, Flags<[Unsupported]>;<br>
 def fhosted : Flag<["-"], "fhosted">, Group<f_Group>;<br>
@@ -568,12 +568,11 @@ def fgnu_runtime : Flag<["-"], "fgnu-run<br>
 def fheinous_gnu_extensions : Flag<["-"], "fheinous-gnu-extensions">, Flags<[CC1Option]>;<br>
 def filelist : Separate<["-"], "filelist">, Flags<[LinkerInput]>;<br>
 def : Flag<["-"], "findirect-virtual-calls">, Alias<fapple_kext>;<br>
-def finline_functions : Flag<["-"], "finline-functions">, Group<clang_ignored_f_Group>;<br>
+def finline_functions : Flag<["-"], "finline-functions">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 def finline : Flag<["-"], "finline">, Group<clang_ignored_f_Group>;<br>
 def finput_charset_EQ : Joined<["-"], "finput-charset=">, Group<f_Group>;<br>
 def finstrument_functions : Flag<["-"], "finstrument-functions">, Group<f_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Generate calls to instrument function entry and exit">;<br>
-def : Flag<["-"], "fkeep-inline-functions">, Group<clang_ignored_f_Group>;<br>
 def flat__namespace : Flag<["-"], "flat_namespace">;<br>
 def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>;<br>
 def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group<f_Group>;<br>
@@ -695,7 +694,6 @@ def fno_exceptions : Flag<["-"], "fno-ex<br>
 def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>;<br>
 def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>;<br>
 def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>;<br>
-def : Flag<["-"], "fno-keep-inline-functions">, Group<clang_ignored_f_Group>;<br>
 def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>,<br>
   HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>;<br>
 def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>,<br>
@@ -814,7 +812,7 @@ def frtti : Flag<["-"], "frtti">, Group<<br>
 def : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>;<br>
 def fshort_enums : Flag<["-"], "fshort-enums">, Group<f_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Allocate to an enum type only as many bytes as it needs for the declared range of possible values">;<br>
-def : Flag<["-"], "freorder-blocks">, Group<clang_ignored_f_Group>;<br>
+def : Flag<["-"], "freorder-blocks">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 def fshort_wchar : Flag<["-"], "fshort-wchar">, Group<f_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Force wchar_t to be a short unsigned int">;<br>
 def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group<f_Group>, Flags<[CC1Option]>,<br>
@@ -1588,53 +1586,55 @@ multiclass BooleanFFlag<string name> {<br>
   def _fno : Flag<["-"], "fno-"#name>;<br>
 }<br>
<br>
-def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<clang_ignored_f_Group>;<br>
+defm : BooleanFFlag<"no-keep-inline-functions">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
<br>
-defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_f_Group>;<br>
-def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_f_Group>;<br>
+def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+<br>
+defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<f_Group>;<br>
<br>
-defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_f_Group>;<br>
-def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_f_Group>;<br>
+defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
<br>
 // FIXME: This option should be supported and wired up to our diognostics, but<br>
 // ignore it for now to avoid breaking builds that use it.<br>
 def fdiagnostics_show_location_EQ : Joined<["-"], "fdiagnostics-show-location=">, Group<clang_ignored_f_Group>;<br>
<br>
 defm eliminate_unused_debug_types : BooleanFFlag<"eliminate-unused-debug-types">, Group<clang_ignored_f_Group>;<br>
-defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_f_Group>;<br>
+defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm function_attribute_list : BooleanFFlag<"function-attribute-list">, Group<clang_ignored_f_Group>;<br>
-defm gcse : BooleanFFlag<"gcse">, Group<clang_ignored_f_Group>;<br>
+defm gcse : BooleanFFlag<"gcse">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm gnu : BooleanFFlag<"gnu">, Group<clang_ignored_f_Group>;<br>
 defm ident : BooleanFFlag<"ident">, Group<clang_ignored_f_Group>;<br>
 defm implicit_templates : BooleanFFlag<"implicit-templates">, Group<clang_ignored_f_Group>;<br>
 def finline_limit_EQ : Joined<["-"], "finline-limit=">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm finline_limit : BooleanFFlag<"inline-limit">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
-defm ivopts : BooleanFFlag<"ivopts">, Group<clang_ignored_f_Group>;<br>
+defm ivopts : BooleanFFlag<"ivopts">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm non_call_exceptions : BooleanFFlag<"non-call-exceptions">, Group<clang_ignored_f_Group>;<br>
 defm permissive : BooleanFFlag<"permissive">, Group<clang_ignored_f_Group>;<br>
-defm prefetch_loop_arrays : BooleanFFlag<"prefetch-loop-arrays">, Group<clang_ignored_f_Group>;<br>
+defm prefetch_loop_arrays : BooleanFFlag<"prefetch-loop-arrays">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm printf : BooleanFFlag<"printf">, Group<clang_ignored_f_Group>;<br>
 defm profile : BooleanFFlag<"profile">, Group<clang_ignored_f_Group>;<br>
-defm profile_correction : BooleanFFlag<"profile-correction">, Group<clang_ignored_f_Group>;<br>
+defm profile_correction : BooleanFFlag<"profile-correction">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm profile_generate_sampling : BooleanFFlag<"profile-generate-sampling">, Group<clang_ignored_f_Group>;<br>
 defm profile_reusedist : BooleanFFlag<"profile-reusedist">, Group<clang_ignored_f_Group>;<br>
-defm profile_values : BooleanFFlag<"profile-values">, Group<clang_ignored_f_Group>;<br>
+defm profile_values : BooleanFFlag<"profile-values">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm regs_graph : BooleanFFlag<"regs-graph">, Group<clang_ignored_f_Group>;<br>
 defm ripa : BooleanFFlag<"ripa">, Group<clang_ignored_f_Group>;<br>
-defm rounding_math : BooleanFFlag<"rounding-math">, Group<clang_ignored_f_Group>;<br>
-defm schedule_insns : BooleanFFlag<"schedule-insns">, Group<clang_ignored_f_Group>;<br>
+defm rounding_math : BooleanFFlag<"rounding-math">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+defm schedule_insns : BooleanFFlag<"schedule-insns">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm see : BooleanFFlag<"see">, Group<clang_ignored_f_Group>;<br>
-defm signaling_nans : BooleanFFlag<"signaling-nans">, Group<clang_ignored_f_Group>;<br>
+defm signaling_nans : BooleanFFlag<"signaling-nans">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group<clang_ignored_f_Group>;<br>
 defm strength_reduce :<br>
-    BooleanFFlag<"strength-reduce">, Group<clang_ignored_f_Group>;<br>
+    BooleanFFlag<"strength-reduce">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm tls_model : BooleanFFlag<"tls-model">, Group<clang_ignored_f_Group>;<br>
-defm tracer : BooleanFFlag<"tracer">, Group<clang_ignored_f_Group>;<br>
+defm tracer : BooleanFFlag<"tracer">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
 defm tree_salias : BooleanFFlag<"tree-salias">, Group<clang_ignored_f_Group>;<br>
 defm tree_vectorizer_verbose : BooleanFFlag<"tree-vectorizer-verbose">, Group<clang_ignored_f_Group>;<br>
-defm unroll_all_loops : BooleanFFlag<"unroll-all-loops">, Group<clang_ignored_f_Group>;<br>
-defm unswitch_loops : BooleanFFlag<"unswitch-loops">, Group<clang_ignored_f_Group>;<br>
+defm unroll_all_loops : BooleanFFlag<"unroll-all-loops">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
+defm unswitch_loops : BooleanFFlag<"unswitch-loops">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
<br>
<br>
 // gfortran options that we recognize in the driver and pass along when<br>
<br>
Modified: cfe/trunk/test/Driver/clang_f_opts.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/clang_f_opts.c?rev=213365&r1=213364&r2=213365&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/clang_f_opts.c?rev=213365&r1=213364&r2=213365&view=diff</a><br>




==============================================================================<br>
--- cfe/trunk/test/Driver/clang_f_opts.c (original)<br>
+++ cfe/trunk/test/Driver/clang_f_opts.c Fri Jul 18 06:38:58 2014<br>
@@ -170,10 +170,60 @@<br>
 // IGNORE-NOT: error: unknown argument<br>
<br>
 // Test that the warning is displayed on these.<br>
-// RUN: %clang -### -finline-limit=1000 %s 2>&1 | FileCheck --check-prefix=CHECK-WARNING1 %s<br>
-// RUN: %clang -### -finline-limit %s 2>&1 | FileCheck --check-prefix=CHECK-WARNING2 %s<br>
-// CHECK-WARNING1: optimization flag '-finline-limit=1000' is not supported<br>
-// CHECK-WARNING2: optimization flag '-finline-limit' is not supported<br>
+// RUN: %clang -###                                                           \<br>
+// RUN: -finline-limit=1000                                                   \<br>
+// RUN: -finline-limit                                                        \<br>
+// RUN: -fexpensive-optimizations                                             \<br>
+// RUN: -fno-expensive-optimizations                                          \<br>
+// RUN: -fno-defer-pop                                                        \<br>
+// RUN: -finline-functions                                                    \<br>
+// RUN: -fno-keep-inline-functions                                            \<br>
+// RUN: -freorder-blocks                                                      \<br>
+// RUN: -fprofile-dir=/rand/dir                                               \<br>
+// RUN: -fprofile-use                                                         \<br>
+// RUN: -fprofile-use=/rand/dir                                               \<br>
+// RUN: -falign-functions                                                     \<br>
+// RUN: -falign-functions=1                                                   \<br>
+// RUN: -ffloat-store                                                         \<br>
+// RUN: -fgcse                                                                \<br>
+// RUN: -fivopts                                                              \<br>
+// RUN: -fprefetch-loop-arrays                                                \<br>
+// RUN: -fprofile-correction                                                  \<br>
+// RUN: -fprofile-values                                                      \<br>
+// RUN: -frounding-math                                                       \<br>
+// RUN: -fschedule-insns                                                      \<br>
+// RUN: -fsignaling-nans                                                      \<br>
+// RUN: -fstrength-reduce                                                     \<br>
+// RUN: -ftracer                                                              \<br>
+// RUN: -funroll-all-loops                                                    \<br>
+// RUN: -funswitch-loops                                                      \<br>
+// RUN: %s 2>&1 | FileCheck --check-prefix=CHECK-WARNING %s<br>
+// CHECK-WARNING-DAG: optimization flag '-finline-limit=1000' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-finline-limit' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fexpensive-optimizations' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fno-expensive-optimizations' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fno-defer-pop' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-finline-functions' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fno-keep-inline-functions' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-freorder-blocks' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fprofile-dir=/rand/dir' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fprofile-use' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fprofile-use=/rand/dir' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-falign-functions' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-falign-functions=1' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-ffloat-store' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fgcse' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fivopts' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fprefetch-loop-arrays' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fprofile-correction' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fprofile-values' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-frounding-math' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fschedule-insns' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fsignaling-nans' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-fstrength-reduce' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-ftracer' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-funroll-all-loops' is not supported<br>
+// CHECK-WARNING-DAG: optimization flag '-funswitch-loops' is not supported<br>
<br>
 // Test that we mute the warning on these<br>
 // RUN: %clang -### -finline-limit=1000 -Wno-invalid-command-line-argument              \<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>