Andrew Carlotti <andrew.carlo...@arm.com> writes: > It seems odd that we add "native" to the list for -march but not for > -mcpu. This is probably a bug, but for now we'll preserve the existing > behaviour.
Yeah, agree it looks like a bug (but also that it's not something to fix as part of this series). > gcc/ChangeLog: > > * config/aarch64/aarch64.cc > (aarch64_print_hint_for_core_or_arch): Inline into... > (aarch64_print_hint_for_core): ...here... > (aarch64_print_hint_for_arch): ...and here. > > > diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc > index > 9b44d08f3e5fe6b4a7aa8f040e7001e3070b362d..f33034cbb205eb52b5ee5965b8b972cedf6f4927 > 100644 > --- a/gcc/config/aarch64/aarch64.cc > +++ b/gcc/config/aarch64/aarch64.cc > @@ -18884,25 +18884,17 @@ aarch64_override_options_internal (struct > gcc_options *opts) > aarch64_override_options_after_change_1 (opts); > } > > -/* Print a hint with a suggestion for a core or architecture name that > - most closely resembles what the user passed in STR. ARCH is true if > - the user is asking for an architecture name. ARCH is false if the user > - is asking for a core name. */ > +/* Print a hint with a suggestion for a core name that most closely resembles > + what the user passed in STR. */ > > -static void > -aarch64_print_hint_for_core_or_arch (const char *str, bool arch) > +inline static void > +aarch64_print_hint_for_core (const char *str) > { > auto_vec<const char *> candidates; > - const struct processor *entry = arch ? all_architectures : all_cores; > + const struct processor *entry = all_cores; > for (; entry->name != NULL; entry++) > candidates.safe_push (entry->name); > > -#ifdef HAVE_LOCAL_CPU_DETECT > - /* Add also "native" as possible value. */ > - if (arch) > - candidates.safe_push ("native"); > -#endif > - > char *s; > const char *hint = candidates_list_and_hint (str, s, candidates); > if (hint) > @@ -18914,22 +18906,31 @@ aarch64_print_hint_for_core_or_arch (const char > *str, bool arch) > XDELETEVEC (s); > } > > -/* Print a hint with a suggestion for a core name that most closely resembles > - what the user passed in STR. */ > - > -inline static void > -aarch64_print_hint_for_core (const char *str) > -{ > - aarch64_print_hint_for_core_or_arch (str, false); > -} > - > /* Print a hint with a suggestion for an architecture name that most closely > resembles what the user passed in STR. */ > > inline static void > aarch64_print_hint_for_arch (const char *str) > { > - aarch64_print_hint_for_core_or_arch (str, true); > + auto_vec<const char *> candidates; > + const struct processor *entry = all_architectures; > + for (; entry->name != NULL; entry++) > + candidates.safe_push (entry->name); > + > +#ifdef HAVE_LOCAL_CPU_DETECT > + /* Add also "native" as possible value. */ > + candidates.safe_push ("native"); > +#endif > + > + char *s; > + const char *hint = candidates_list_and_hint (str, s, candidates); > + if (hint) > + inform (input_location, "valid arguments are: %s;" > + " did you mean %qs?", s, hint); > + else > + inform (input_location, "valid arguments are: %s", s); > + > + XDELETEVEC (s); Could we keep the "char *s;" onwards in a common routine, maybe called "aarch64_print_hint_candidates", and share it with aarch64_print_hint_for_extensions? One reason for asking is that it ensures that the wording of the diagnostic is consistent (and that we therefore don't end up with multiple slightly-different translation strings). OK with that change, thanks. Richard > } > >