This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] [arm] Fix pr82175 - fix -mcpu=native not working correctly
- From: "Richard Earnshaw (lists)" <Richard dot Earnshaw at arm dot com>
- To: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 26 Sep 2017 10:35:53 +0100
- Subject: [patch] [arm] Fix pr82175 - fix -mcpu=native not working correctly
- Authentication-results: sourceware.org; auth=none
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