[PATCH, rs6000] Fix PR56010 and PR83743, -mcpu=native use wrong names

Segher Boessenkool segher@kernel.crashing.org
Tue Jan 30 02:37:00 GMT 2018


Hi!

On Mon, Jan 29, 2018 at 02:33:50PM -0600, Peter Bergner wrote:
> On 1/29/18 1:23 PM, Segher Boessenkool wrote:
> >> +#ifdef __linux__
> >> +/* Canonical GCC cpu name table.  */
> >> +static const char *rs6000_supported_cpu_names[] =
> >> +{
> >> +#define RS6000_CPU(NAME, CPU, FLAGS) NAME,
> >> +#include "rs6000-cpus.def"
> >> +#undef RS6000_CPU
> >> +};
> > 
> > Can't you just use processor_target_table here?  Seems like a waste to
> > duplicate all that.  (Need to make the table non-static then of course).
> 
> Changing it to static won't help, because we don't link rs6000.o into
> xgcc.  That file is linked into cc1, etc, so we don't have access to it.

Oh ah, tricky.  Fine as is then.

> Well, this isn't fprintf that I can call multiple times to emit my entire
> error message.  Once you call fatal_error(), it never returns, so I copied
> the way opts-common.c:cmdline_handle_error() emits its error message which
> is to build it up and then emit it altogether like this....however, I now
> see I copied GCC 5's version of this code.  Doh! :-)
> 
> The current version of that code looks like the following, which I should
> copy instead.  Unless you have a different suggestion?

Looks better yeah :-)  Probably candidates_list_and_hint does similar
nasty character counting, but we don't have to look at it ;-)


Segher


>       char *s;
> 
>       if (e->unknown_error)
>         error_at (loc, e->unknown_error, arg);
>       else
>         error_at (loc, "unrecognized argument in option %qs", opt);
> 
>       auto_vec <const char *> candidates;
>       for (i = 0; e->values[i].arg != NULL; i++)
>         {
>           if (!enum_arg_ok_for_language (&e->values[i], lang_mask))
>             continue;
>           candidates.safe_push (e->values[i].arg);
>         }
>       const char *hint = candidates_list_and_hint (arg, s, candidates);
>       if (hint)
>         inform (loc, "valid arguments to %qs are: %s; did you mean %qs?",
>                 option->opt_text, s, hint);
>       else
>         inform (loc, "valid arguments to %qs are: %s", option->opt_text, s);
>       XDELETEVEC (s);



More information about the Gcc-patches mailing list