The new option processing machinery relies on %< rules in the specs to suppress options that are rewritten. Suppression appears to be a two phase process where the option is partially suppressed when %< is processed and then fully suppressed at the end of the string. Strings are separated by commas and there can be multiple strings used to form DRIVER_SELF_SPECS.
The fix in this case is to separate the driver self specs for ARM into separate rules as described; this forces the -m{cpu,tune,arch}=native options to be properly removed before proceeding to the next rule set. PR target/82175 * config/arm/arm.h (DRIVER_SELF_SPECS): Separate sub-rules with commas. Tested on cross and native. Applied to trunk.
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 9a171b0..0804e2a 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -2237,9 +2237,12 @@ const char *arm_be8_option (int argc, const char **argv); " %{mfloat-abi=*: abi %*}" \ " %<march=*) " +/* Complete set of specs for the driver. Commas separate the + individual rules so that any option suppression (%<opt...)is + completed before starting subsequent rules. */ #define DRIVER_SELF_SPECS \ - MCPU_MTUNE_NATIVE_SPECS \ - TARGET_MODE_SPECS \ + MCPU_MTUNE_NATIVE_SPECS, \ + TARGET_MODE_SPECS, \ ARCH_CANONICAL_SPECS #define TARGET_SUPPORTS_WIDE_INT 1