]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
diagnostics: Add new option -fdiagnostics-plain-output
authorLewis Hyatt <lhyatt@gmail.com>
Thu, 13 Aug 2020 17:05:46 +0000 (13:05 -0400)
committerLewis Hyatt <lhyatt@gmail.com>
Fri, 14 Aug 2020 13:29:19 +0000 (09:29 -0400)
Adds the new option -fdiagnostics-plain-output, which is an alias for
several others:

    -fno-diagnostics-show-caret
    -fno-diagnostics-show-line-numbers
    -fdiagnostics-color=never
    -fdiagnostics-urls=never

The idea is that in the future, if the default behavior of diagnostics is
changed to add some fancy feature or other, then the
-fdiagnostics-plain-output option will also be changed accordingly so that
the old behavior is preserved in the presence of this option. This allows
us to use -fdiagnostics-plain-output in in the testsuite, such that the
testsuite (specifically the setting of TEST_ALWAYS_FLAGS in prune.exp)
does not need to be touched whenever diagnostics get a new look. This also
removes the need to add workarounds to compat.exp for every new option
that may be needed in a newer version of the compiler, but is not
supported in older versions.

gcc/ChangeLog:

* common.opt: Add new option -fdiagnostics-plain-output.
* doc/invoke.texi: Document it.
* opts-common.c (decode_cmdline_options_to_array): Implement it.
(decode_cmdline_option): Add missing const qualifier to argv.

libstdc++-v3/ChangeLog:

* testsuite/lib/libstdc++.exp: Use the new option
-fdiagnostics-plain-output.

gcc/testsuite/ChangeLog:

* lib/prune.exp: Change TEST_ALWAYS_FLAGS to use -fdiagnostics-plain-output.
* lib/c-compat.exp: Adapt to the prune.exp change.

gcc/common.opt
gcc/doc/invoke.texi
gcc/opts-common.c
gcc/testsuite/lib/c-compat.exp
gcc/testsuite/lib/prune.exp
libstdc++-v3/testsuite/lib/libstdc++.exp

index 084e28ee6172c3ecf2e05ed7d9e38e7da63b054e..513125f0c00be3068b804dbec7ccaa8d5e14553e 100644 (file)
@@ -1378,6 +1378,10 @@ fdiagnostics-path-format=
 Common Joined RejectNegative Var(flag_diagnostics_path_format) Enum(diagnostic_path_format) Init(DPF_INLINE_EVENTS)
 Specify how to print any control-flow path associated with a diagnostic.
 
+fdiagnostics-plain-output
+Driver Common RejectNegative
+Turn off any diagnostics features that complicate the output, such as line numbers, color, and warning URLs.
+
 ftabstop=
 Common Joined RejectNegative UInteger
 -ftabstop=<number>      Distance between tab stops for column reporting.
index dea1e1866a49ce53a562f751e8a4981c4a0c8004..70dc1ab73a12b64d47c48f8834d88ea246c9e4c3 100644 (file)
@@ -280,6 +280,7 @@ Objective-C and Objective-C++ Dialects}.
 @item Diagnostic Message Formatting Options
 @xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
 @gccoptlist{-fmessage-length=@var{n}  @gol
+-fdiagnostics-plain-output @gol
 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
 -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
 -fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
@@ -4291,6 +4292,19 @@ Note - this option also affects the display of the @samp{#error} and
 function/type/variable attribute.  It does not however affect the
 @samp{pragma GCC warning} and @samp{pragma GCC error} pragmas.
 
+@item -fdiagnostics-plain-output
+This option requests that diagnostic output look as plain as possible, which
+may be useful when running @command{dejagnu} or other utilities that need to
+parse diagnostics output and prefer that it remain more stable over time.
+@option{-fdiagnostics-plain-output} is currently equivalent to the following
+options:
+@gccoptlist{-fno-diagnostics-show-caret @gol
+-fno-diagnostics-show-line-numbers @gol
+-fdiagnostics-color=never @gol
+-fdiagnostics-urls=never}
+In the future, if GCC changes the default appearance of its diagnostics, the
+corresponding option to disable the new behavior will be added to this list.
+
 @item -fdiagnostics-show-location=once
 @opindex fdiagnostics-show-location
 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
index de9510abd64faa84f220fb29e526b87375364652..237e4ce454e69c16994741278503bccc704ed9e4 100644 (file)
@@ -529,7 +529,7 @@ add_misspelling_candidates (auto_vec<char *> *candidates,
    consumed.  */
 
 static unsigned int
-decode_cmdline_option (const char **argv, unsigned int lang_mask,
+decode_cmdline_option (const char *const *argv, unsigned int lang_mask,
                       struct cl_decoded_option *decoded)
 {
   size_t opt_index;
@@ -944,7 +944,8 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
   struct cl_decoded_option *opt_array;
   unsigned int num_decoded_options;
 
-  opt_array = XNEWVEC (struct cl_decoded_option, argc);
+  int opt_array_len = argc;
+  opt_array = XNEWVEC (struct cl_decoded_option, opt_array_len);
 
   opt_array[0].opt_index = OPT_SPECIAL_program_name;
   opt_array[0].warn_message = NULL;
@@ -981,6 +982,40 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
          argv[++i] = replacement;
        }
 
+      /* Expand -fdiagnostics-plain-output to its constituents.  This needs
+        to happen here so that prune_options can handle -fdiagnostics-color
+        specially.  */
+      if (!strcmp (opt, "-fdiagnostics-plain-output"))
+       {
+         /* If you have changed the default diagnostics output, and this new
+            output is not appropriately "plain" (e.g., the change needs to be
+            undone in order for the testsuite to work properly), then please do
+            the following:
+                1.  Add the necessary option to undo the new behavior to
+                    the array below.
+                2.  Update the documentation for -fdiagnostics-plain-output
+                    in invoke.texi.  */
+         const char *const expanded_args[] = {
+           "-fno-diagnostics-show-caret",
+           "-fno-diagnostics-show-line-numbers",
+           "-fdiagnostics-color=never",
+           "-fdiagnostics-urls=never",
+         };
+         const int num_expanded = ARRAY_SIZE (expanded_args);
+         opt_array_len += num_expanded - 1;
+         opt_array = XRESIZEVEC (struct cl_decoded_option,
+                                 opt_array, opt_array_len);
+         for (int j = 0, nj; j < num_expanded; j += nj)
+           {
+             nj = decode_cmdline_option (expanded_args + j, lang_mask,
+                                         &opt_array[num_decoded_options]);
+             num_decoded_options++;
+           }
+
+         n = 1;
+         continue;
+       }
+
       n = decode_cmdline_option (argv + i, lang_mask,
                                 &opt_array[num_decoded_options]);
       num_decoded_options++;
index 9493c214aea9d6733f90fa80f8093eaa6dd7ae52..2b673179115ca0f690849dec7c460daa6e33f7cd 100644 (file)
@@ -36,24 +36,34 @@ load_lib target-libpath.exp
 proc compat-use-alt-compiler { } {
     global GCC_UNDER_TEST ALT_CC_UNDER_TEST
     global compat_same_alt compat_alt_caret compat_alt_color compat_no_line_no
-    global compat_alt_urls
+    global compat_alt_urls compat_alt_plain_output
     global TEST_ALWAYS_FLAGS
 
     # We don't need to do this if the alternate compiler is actually
     # the same as the compiler under test.
     if { $compat_same_alt == 0 } then {
        set GCC_UNDER_TEST $ALT_CC_UNDER_TEST
+
+       # These flags are no longer added to TEST_ALWAYS_FLAGS by prune.exp
+       # because they are subsumed by -fdiagnostics-plain-output. Add them back
+       # for compatibility testing with older compilers that do not understand
+       # -fdiagnostics-plain-output.
+       set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -fdiagnostics-color=never -fdiagnostics-urls=never $TEST_ALWAYS_FLAGS"
+
        if { $compat_alt_caret == 0 } then {
-           regsub -- "-fno-diagnostics-show-caret" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
+           regsub -all -- "-fno-diagnostics-show-caret" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
        }
        if { $compat_alt_color == 0 } then {
-           regsub -- "-fdiagnostics-color=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
+           regsub -all -- "-fdiagnostics-color=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
        }
        if { $compat_alt_urls == 0 } then {
-           regsub -- "-fdiagnostics-urls=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
+           regsub -all -- "-fdiagnostics-urls=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
        }
        if { $compat_no_line_no == 0 } then {
-           regsub -- "-fno-diagnostics-show-line-numbers" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
+           regsub -all -- "-fno-diagnostics-show-line-numbers" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
+       }
+       if { $compat_alt_plain_output == 0 } then {
+           regsub -all -- "-fdiagnostics-plain-output" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
        }
        restore_gcc_exec_prefix_env_var
     }
@@ -85,12 +95,14 @@ proc compat_setup_dfp { } {
     global compat_alt_caret
     global compat_alt_color
     global compat_alt_urls
+    global compat_alt_plain_output
     global compat_no_line_no
     global TEST_ALWAYS_FLAGS compat_save_TEST_ALWAYS_FLAGS
 
     set compat_alt_caret 0
     set compat_alt_color 0
     set compat_alt_urls 0
+    set compat_alt_plain_output 0
     set compat_no_line_no 0
     set compat_save_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS
 
@@ -119,6 +131,10 @@ proc compat_setup_dfp { } {
                int dummy; } "-fno-diagnostics-show-line-numbers"] != 0 } {
            set compat_no_line_no 1
        }
+       if { [check_no_compiler_messages_nocache compat_alt_has_plain_output object {
+               int dummy; } "-fdiagnostics-plain-output"] != 0 } {
+           set compat_alt_plain_output 1
+       }
        
        compat-use-tst-compiler
     }
index 58a739684a5d86796538a70337433a563cdea46c..190367c44e0f7d5cd5ece03075701f2d20ec13a3 100644 (file)
 
 load_lib multiline.exp
 
+# Add options to TEST_ALWAYS_FLAGS so that diagnostics have the expected output
+# format.  Note: You should not normally need to add more options here.  If you
+# have made a change to the default diagnostic output format and are wanting to
+# undo that in the testsuite here, then please update the handling of
+# -fdiagnostics-plain-output in opts-common.c instead.
+
 if ![info exists TEST_ALWAYS_FLAGS] {
     set TEST_ALWAYS_FLAGS ""
 }
-set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -fdiagnostics-color=never  -fdiagnostics-urls=never $TEST_ALWAYS_FLAGS"
+set TEST_ALWAYS_FLAGS "-fdiagnostics-plain-output $TEST_ALWAYS_FLAGS"
 
 proc prune_gcc_output { text } {
     global srcdir
index 16963f2edd5796f3e237ee74b39aa10040e60c33..78484f7c9afe799afbcc97c92a9190f97e3bf131 100644 (file)
@@ -482,7 +482,7 @@ proc v3_target_compile { source dest type options } {
     global STATIC_LIBCXXFLAGS
     global tool
 
-    lappend options "additional_flags=-fno-diagnostics-show-caret -fdiagnostics-color=never -fdiagnostics-urls=never"
+    lappend options "additional_flags=-fdiagnostics-plain-output"
 
     if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
        lappend options "libs=${gluefile}"