driver: Move -fdiagnostics-urls= early like -fdiagnostics-color= [PR114980]

Message ID 20240508055019.3460409-2-xry111@xry111.site
State New
Headers
Series driver: Move -fdiagnostics-urls= early like -fdiagnostics-color= [PR114980] |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gcc_check--master-aarch64 success Testing passed

Commit Message

Xi Ruoyao May 8, 2024, 5:50 a.m. UTC
  In GCC 14 we started to emit URLs for "command-line option <option> is
valid for <language> but not <another language>" and "-Werror= argument
'-Werror=<option>' is not valid for <language>" warnings.  So we should
have moved -fdiagnostics-urls= early like -fdiagnostics-color=, or
-fdiagnostics-urls= wouldn't be able to control URLs in these warnings.

No test cases are added because with TERM=xterm-256colors PR114980
already triggers some test failures.

gcc/ChangeLog:

	PR driver/114980
	* opts-common.cc (prune_options): Move -fdiagnostics-urls=
	early like -fdiagnostics-color=.
---

Bootstrapped and regtested on x86_64-linux-gnu.  Ok for trunk and
releases/gcc-14?

 gcc/opts-common.cc | 13 +++++++++++++
 1 file changed, 13 insertions(+)
  

Comments

Joseph Myers May 9, 2024, 8:21 p.m. UTC | #1
On Wed, 8 May 2024, Xi Ruoyao wrote:

> In GCC 14 we started to emit URLs for "command-line option <option> is
> valid for <language> but not <another language>" and "-Werror= argument
> '-Werror=<option>' is not valid for <language>" warnings.  So we should
> have moved -fdiagnostics-urls= early like -fdiagnostics-color=, or
> -fdiagnostics-urls= wouldn't be able to control URLs in these warnings.
> 
> No test cases are added because with TERM=xterm-256colors PR114980
> already triggers some test failures.
> 
> gcc/ChangeLog:
> 
> 	PR driver/114980
> 	* opts-common.cc (prune_options): Move -fdiagnostics-urls=
> 	early like -fdiagnostics-color=.

OK.
  
Xi Ruoyao May 10, 2024, 3:29 a.m. UTC | #2
On Thu, 2024-05-09 at 20:21 +0000, Joseph Myers wrote:
> On Wed, 8 May 2024, Xi Ruoyao wrote:
> 
> > In GCC 14 we started to emit URLs for "command-line option <option> is
> > valid for <language> but not <another language>" and "-Werror= argument
> > '-Werror=<option>' is not valid for <language>" warnings.  So we should
> > have moved -fdiagnostics-urls= early like -fdiagnostics-color=, or
> > -fdiagnostics-urls= wouldn't be able to control URLs in these warnings.
> > 
> > No test cases are added because with TERM=xterm-256colors PR114980
> > already triggers some test failures.
> > 
> > gcc/ChangeLog:
> > 
> > 	PR driver/114980
> > 	* opts-common.cc (prune_options): Move -fdiagnostics-urls=
> > 	early like -fdiagnostics-color=.
> 
> OK.

Pushed r15-355 and r14-10192.
  

Patch

diff --git a/gcc/opts-common.cc b/gcc/opts-common.cc
index 4a2dff243b0..2d1e86ff94f 100644
--- a/gcc/opts-common.cc
+++ b/gcc/opts-common.cc
@@ -1152,6 +1152,7 @@  prune_options (struct cl_decoded_option **decoded_options,
   unsigned int options_to_prepend = 0;
   unsigned int Wcomplain_wrong_lang_idx = 0;
   unsigned int fdiagnostics_color_idx = 0;
+  unsigned int fdiagnostics_urls_idx = 0;
 
   /* Remove arguments which are negated by others after them.  */
   new_decoded_options_count = 0;
@@ -1185,6 +1186,12 @@  prune_options (struct cl_decoded_option **decoded_options,
 	    ++options_to_prepend;
 	  fdiagnostics_color_idx = i;
 	  continue;
+	case OPT_fdiagnostics_urls_:
+	  gcc_checking_assert (i != 0);
+	  if (fdiagnostics_urls_idx == 0)
+	    ++options_to_prepend;
+	  fdiagnostics_urls_idx = i;
+	  continue;
 
 	default:
 	  gcc_assert (opt_idx < cl_options_count);
@@ -1248,6 +1255,12 @@  keep:
 	    = old_decoded_options[fdiagnostics_color_idx];
 	  new_decoded_options_count++;
 	}
+      if (fdiagnostics_urls_idx != 0)
+	{
+	  new_decoded_options[argv_0 + options_prepended++]
+	    = old_decoded_options[fdiagnostics_urls_idx];
+	  new_decoded_options_count++;
+	}
       gcc_checking_assert (options_to_prepend == options_prepended);
     }