[Patch] opts: Change `is incompatible with` messages to have standard parametrised form

Matthew Malcomson matthew.malcomson@arm.com
Mon Nov 9 15:22:46 GMT 2020


Hello,

In a recent review for one of the hwasan patches Richard S. noticed there are
quite a few errors of the form "%<someflag%> is incompatible with
<otherflag%>".
https://gcc.gnu.org/pipermail/gcc-patches/2020-October/556137.html

In order to avoid this creating extra work for translators we would like to
change these error messages to use the form "%qs is incompatible with %qs" and
pass the flag as format arguments.

This patch implements that change.
There is only one change in the output the compiler produces from this patch,
an error message of "-fsanitize=address and -fsanitize=kernel-address are
incompatible with -fsanitize=thread" has been changed to "-fsanitize=thread is
incompatible with -fsanitize=address|kernel-address".
This matches the similar error messages for live patching which use the
messages "-f<something> is incompatible with
-flive-patching=inline-only-static|inline-clone".

Bootstrapped and regtested on AArch64 without any problems.
Ok for trunk?

gcc/ChangeLog:

	* opts.c (control_options_for_live_patching): Reform 'is incompatible
	with' error messages to use a standard message with differing format
	arguments.
	(finish_options): Likewise.

gcc/testsuite/ChangeLog:

	* c-c++-common/ubsan/sanitize-recover-7.c: Update testcase.



###############     Attachment also inlined for ease of reply    ###############


diff --git a/gcc/opts.c b/gcc/opts.c
index 96291e89a49dd1cf25a0cacc5a62413d120fa24d..ac9972d9c386247af3482e07a94c76da3e1abb4d 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -688,30 +688,26 @@ control_options_for_live_patching (struct gcc_options *opts,
     {
     case LIVE_PATCHING_INLINE_ONLY_STATIC:
       if (opts_set->x_flag_ipa_cp_clone && opts->x_flag_ipa_cp_clone)
-	error_at (loc,
-		  "%<-fipa-cp-clone%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-cp-clone", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_ipa_cp_clone = 0;
 
       if (opts_set->x_flag_ipa_sra && opts->x_flag_ipa_sra)
-	error_at (loc,
-		  "%<-fipa-sra%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-sra", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_ipa_sra = 0;
 
       if (opts_set->x_flag_partial_inlining && opts->x_flag_partial_inlining)
-	error_at (loc,
-		  "%<-fpartial-inlining%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fpartial-inlining", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_partial_inlining = 0;
 
       if (opts_set->x_flag_ipa_cp && opts->x_flag_ipa_cp)
-	error_at (loc,
-		  "%<-fipa-cp%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-cp", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_ipa_cp = 0;
 
@@ -719,9 +715,9 @@ control_options_for_live_patching (struct gcc_options *opts,
     case LIVE_PATCHING_INLINE_CLONE:
       /* live patching should disable whole-program optimization.  */
       if (opts_set->x_flag_whole_program && opts->x_flag_whole_program)
-	error_at (loc,
-		  "%<-fwhole-program%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fwhole-program",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_whole_program = 0;
 
@@ -730,65 +726,65 @@ control_options_for_live_patching (struct gcc_options *opts,
 	 && !flag_partial_inlining.  */
 
       if (opts_set->x_flag_ipa_pta && opts->x_flag_ipa_pta)
-	error_at (loc,
-		  "%<-fipa-pta%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-pta",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_pta = 0;
 
       if (opts_set->x_flag_ipa_reference && opts->x_flag_ipa_reference)
-	error_at (loc,
-		  "%<-fipa-reference%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-reference",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_reference = 0;
 
       if (opts_set->x_flag_ipa_ra && opts->x_flag_ipa_ra)
-	error_at (loc,
-		  "%<-fipa-ra%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-ra",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_ra = 0;
 
       if (opts_set->x_flag_ipa_icf && opts->x_flag_ipa_icf)
-	error_at (loc,
-		  "%<-fipa-icf%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-icf",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_icf = 0;
 
       if (opts_set->x_flag_ipa_icf_functions && opts->x_flag_ipa_icf_functions)
-	error_at (loc,
-		  "%<-fipa-icf-functions%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-icf-functions",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_icf_functions = 0;
 
       if (opts_set->x_flag_ipa_icf_variables && opts->x_flag_ipa_icf_variables)
-	error_at (loc,
-		  "%<-fipa-icf-variables%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-icf-variables",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_icf_variables = 0;
 
       if (opts_set->x_flag_ipa_bit_cp && opts->x_flag_ipa_bit_cp)
-	error_at (loc,
-		  "%<-fipa-bit-cp%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-bit-cp",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_bit_cp = 0;
 
       if (opts_set->x_flag_ipa_vrp && opts->x_flag_ipa_vrp)
-	error_at (loc,
-		  "%<-fipa-vrp%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-vrp",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_vrp = 0;
 
       if (opts_set->x_flag_ipa_pure_const && opts->x_flag_ipa_pure_const)
-	error_at (loc,
-		  "%<-fipa-pure-const%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-pure-const",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_pure_const = 0;
 
@@ -804,18 +800,18 @@ control_options_for_live_patching (struct gcc_options *opts,
       /* discovery of functions/variables with no address taken.  */
       if (opts_set->x_flag_ipa_reference_addressable
 	  && opts->x_flag_ipa_reference_addressable)
-	error_at (loc,
-		  "%<-fipa-reference-addressable%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-reference-addressable",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_reference_addressable = 0;
 
       /* ipa stack alignment propagation.  */
       if (opts_set->x_flag_ipa_stack_alignment
 	  && opts->x_flag_ipa_stack_alignment)
-	error_at (loc,
-		  "%<-fipa-stack-alignment%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-stack-alignment",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_stack_alignment = 0;
       break;
@@ -1081,21 +1077,19 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
   /* Userspace and kernel ASan conflict with each other.  */
   if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS)
       && (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS))
-    error_at (loc,
-	      "%<-fsanitize=address%> is incompatible with "
-	      "%<-fsanitize=kernel-address%>");
+    error_at (loc, "%qs is incompatible with %qs",
+	      "-fsanitize=address", "-fsanitize=kernel-address");
 
   /* And with TSan.  */
   if ((opts->x_flag_sanitize & SANITIZE_ADDRESS)
       && (opts->x_flag_sanitize & SANITIZE_THREAD))
-    error_at (loc,
-	      "%<-fsanitize=address%> and %<-fsanitize=kernel-address%> "
-	      "are incompatible with %<-fsanitize=thread%>");
+    error_at (loc, "%qs is incompatible with %qs",
+	      "-fsanitize=thread", "-fsanitize=address|kernel-address");
 
   if ((opts->x_flag_sanitize & SANITIZE_LEAK)
       && (opts->x_flag_sanitize & SANITIZE_THREAD))
-    error_at (loc,
-	      "%<-fsanitize=leak%> is incompatible with %<-fsanitize=thread%>");
+    error_at (loc, "%qs is incompatible with %qs",
+	      "-fsanitize=leak", "-fsanitize=thread");
 
   /* Check error recovery for -fsanitize-recover option.  */
   for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
diff --git a/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c b/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
index a571f2bcdc12c914124d8e403b77f78b1f11f26d..f325a7472289595d6b489f121dcd91d795a85c8b 100644
--- a/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
+++ b/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
@@ -3,4 +3,4 @@
 
 int i;
 
-/* { dg-error ".-fsanitize=address. and .-fsanitize=kernel-address. are incompatible with .-fsanitize=thread." "" { target *-*-* } 0 } */
+/* { dg-error ".-fsanitize=thread. is incompatible with .-fsanitize=address|kernel-address." "" { target *-*-* } 0 } */

-------------- next part --------------
diff --git a/gcc/opts.c b/gcc/opts.c
index 96291e89a49dd1cf25a0cacc5a62413d120fa24d..ac9972d9c386247af3482e07a94c76da3e1abb4d 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -688,30 +688,26 @@ control_options_for_live_patching (struct gcc_options *opts,
     {
     case LIVE_PATCHING_INLINE_ONLY_STATIC:
       if (opts_set->x_flag_ipa_cp_clone && opts->x_flag_ipa_cp_clone)
-	error_at (loc,
-		  "%<-fipa-cp-clone%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-cp-clone", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_ipa_cp_clone = 0;
 
       if (opts_set->x_flag_ipa_sra && opts->x_flag_ipa_sra)
-	error_at (loc,
-		  "%<-fipa-sra%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-sra", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_ipa_sra = 0;
 
       if (opts_set->x_flag_partial_inlining && opts->x_flag_partial_inlining)
-	error_at (loc,
-		  "%<-fpartial-inlining%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fpartial-inlining", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_partial_inlining = 0;
 
       if (opts_set->x_flag_ipa_cp && opts->x_flag_ipa_cp)
-	error_at (loc,
-		  "%<-fipa-cp%> is incompatible with "
-		  "%<-flive-patching=inline-only-static%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-cp", "-flive-patching=inline-only-static");
       else
 	opts->x_flag_ipa_cp = 0;
 
@@ -719,9 +715,9 @@ control_options_for_live_patching (struct gcc_options *opts,
     case LIVE_PATCHING_INLINE_CLONE:
       /* live patching should disable whole-program optimization.  */
       if (opts_set->x_flag_whole_program && opts->x_flag_whole_program)
-	error_at (loc,
-		  "%<-fwhole-program%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fwhole-program",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_whole_program = 0;
 
@@ -730,65 +726,65 @@ control_options_for_live_patching (struct gcc_options *opts,
 	 && !flag_partial_inlining.  */
 
       if (opts_set->x_flag_ipa_pta && opts->x_flag_ipa_pta)
-	error_at (loc,
-		  "%<-fipa-pta%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-pta",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_pta = 0;
 
       if (opts_set->x_flag_ipa_reference && opts->x_flag_ipa_reference)
-	error_at (loc,
-		  "%<-fipa-reference%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-reference",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_reference = 0;
 
       if (opts_set->x_flag_ipa_ra && opts->x_flag_ipa_ra)
-	error_at (loc,
-		  "%<-fipa-ra%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-ra",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_ra = 0;
 
       if (opts_set->x_flag_ipa_icf && opts->x_flag_ipa_icf)
-	error_at (loc,
-		  "%<-fipa-icf%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-icf",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_icf = 0;
 
       if (opts_set->x_flag_ipa_icf_functions && opts->x_flag_ipa_icf_functions)
-	error_at (loc,
-		  "%<-fipa-icf-functions%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-icf-functions",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_icf_functions = 0;
 
       if (opts_set->x_flag_ipa_icf_variables && opts->x_flag_ipa_icf_variables)
-	error_at (loc,
-		  "%<-fipa-icf-variables%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-icf-variables",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_icf_variables = 0;
 
       if (opts_set->x_flag_ipa_bit_cp && opts->x_flag_ipa_bit_cp)
-	error_at (loc,
-		  "%<-fipa-bit-cp%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-bit-cp",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_bit_cp = 0;
 
       if (opts_set->x_flag_ipa_vrp && opts->x_flag_ipa_vrp)
-	error_at (loc,
-		  "%<-fipa-vrp%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-vrp",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_vrp = 0;
 
       if (opts_set->x_flag_ipa_pure_const && opts->x_flag_ipa_pure_const)
-	error_at (loc,
-		  "%<-fipa-pure-const%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-pure-const",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_pure_const = 0;
 
@@ -804,18 +800,18 @@ control_options_for_live_patching (struct gcc_options *opts,
       /* discovery of functions/variables with no address taken.  */
       if (opts_set->x_flag_ipa_reference_addressable
 	  && opts->x_flag_ipa_reference_addressable)
-	error_at (loc,
-		  "%<-fipa-reference-addressable%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-reference-addressable",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_reference_addressable = 0;
 
       /* ipa stack alignment propagation.  */
       if (opts_set->x_flag_ipa_stack_alignment
 	  && opts->x_flag_ipa_stack_alignment)
-	error_at (loc,
-		  "%<-fipa-stack-alignment%> is incompatible with "
-		  "%<-flive-patching=inline-only-static|inline-clone%>");
+	error_at (loc, "%qs is incompatible with %qs",
+		  "-fipa-stack-alignment",
+		  "-flive-patching=inline-only-static|inline-clone");
       else
 	opts->x_flag_ipa_stack_alignment = 0;
       break;
@@ -1081,21 +1077,19 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
   /* Userspace and kernel ASan conflict with each other.  */
   if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS)
       && (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS))
-    error_at (loc,
-	      "%<-fsanitize=address%> is incompatible with "
-	      "%<-fsanitize=kernel-address%>");
+    error_at (loc, "%qs is incompatible with %qs",
+	      "-fsanitize=address", "-fsanitize=kernel-address");
 
   /* And with TSan.  */
   if ((opts->x_flag_sanitize & SANITIZE_ADDRESS)
       && (opts->x_flag_sanitize & SANITIZE_THREAD))
-    error_at (loc,
-	      "%<-fsanitize=address%> and %<-fsanitize=kernel-address%> "
-	      "are incompatible with %<-fsanitize=thread%>");
+    error_at (loc, "%qs is incompatible with %qs",
+	      "-fsanitize=thread", "-fsanitize=address|kernel-address");
 
   if ((opts->x_flag_sanitize & SANITIZE_LEAK)
       && (opts->x_flag_sanitize & SANITIZE_THREAD))
-    error_at (loc,
-	      "%<-fsanitize=leak%> is incompatible with %<-fsanitize=thread%>");
+    error_at (loc, "%qs is incompatible with %qs",
+	      "-fsanitize=leak", "-fsanitize=thread");
 
   /* Check error recovery for -fsanitize-recover option.  */
   for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
diff --git a/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c b/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
index a571f2bcdc12c914124d8e403b77f78b1f11f26d..f325a7472289595d6b489f121dcd91d795a85c8b 100644
--- a/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
+++ b/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
@@ -3,4 +3,4 @@
 
 int i;
 
-/* { dg-error ".-fsanitize=address. and .-fsanitize=kernel-address. are incompatible with .-fsanitize=thread." "" { target *-*-* } 0 } */
+/* { dg-error ".-fsanitize=thread. is incompatible with .-fsanitize=address|kernel-address." "" { target *-*-* } 0 } */



More information about the Gcc-patches mailing list