We get an ICE when using -mpower10 and a -mcpu= value that is older
than power10. The -mpower10 option requires -mcpu=power10 or later.
The following patch enforces that.
This passed bootstrap and regtesting with no errors. Ok for trunk?
GCC 10 does not ICE on this test case, so I am not asking for a backport.
Peter
gcc/
PR target/95907
* config/rs6000/rs6000.c (rs6000_option_override_internal): Add check
to require -mcpu=power10 if using -mpower10.
gcc/testsuite/
PR target/95907
* g++.target/powerpc/pr95907.C: New test.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 6bea544d26a..96241a9d0a3 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4094,6 +4094,14 @@ rs6000_option_override_internal (bool global_init_p)
rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW;
}
+ /* If the user explicitly uses -mpower10, ensure our ISA flags are
+ compatible with it. */
+ if (TARGET_POWER10
+ && (rs6000_isa_flags_explicit & OPTION_MASK_POWER10) != 0
+ && (processor_target_table[cpu_index].target_enable
+ & OPTION_MASK_POWER10) == 0)
+ error ("%qs requires %qs", "-mpower10", "-mcpu=power10");
+
/* Enable -mprefixed by default on power10 systems. */
if (TARGET_POWER10 && (rs6000_isa_flags_explicit & OPTION_MASK_PREFIXED) ==
0)
rs6000_isa_flags |= OPTION_MASK_PREFIXED;
diff --git a/gcc/testsuite/g++.target/powerpc/pr95907.C
b/gcc/testsuite/g++.target/powerpc/pr95907.C
new file mode 100644
index 00000000000..45d276f25a7
--- /dev/null
+++ b/gcc/testsuite/g++.target/powerpc/pr95907.C
@@ -0,0 +1,7 @@
+// PR target/95907
+// { dg-do compile }
+// { dg-require-effective-target power10_ok }
+// { dg-options "-mpower10" }
+
+int foobool_argc;
+bool foobool() { return foobool_argc; }