[Bug target/71652] [4.9/5/6/7 Regression] ICE in in ix86_target_macros_internal, at config/i386/i386-c.c:187
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 12 08:48:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71652
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |uros at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I think the bug is that
if (!strcmp (opts->x_ix86_arch_string, "generic"))
error ("generic CPU can be used only for %stune=%s %s",
prefix, suffix, sw);
else if (!strcmp (opts->x_ix86_arch_string, "intel"))
error ("intel CPU can be used only for %stune=%s %s",
prefix, suffix, sw);
is too late.
I'd stick it into:
for (i = 0; i < pta_size; i++)
if (! strcmp (opts->x_ix86_arch_string, processor_alias_table[i].name))
{
HERE ------------>
ix86_schedule = processor_alias_table[i].schedule;
and if emitting the error, just break, so that neither ix86_arch nor
opts->x_ix86_isa_flags is affected.
Similarly, the "CPU you selected does not support x86-64 " error should not
affect these.
Perhaps it would be helpful to go over the whole ix86_option_override_internal
and for all errors emitted in there make sure that beyond reporting errors the
function doesn't keep the options in an invalid state - changes them to some
sane defaults on errors.
Some places already do that:
error ("-mstringop-strategy=rep_8byte not supported for 32-bit code");
opts->x_ix86_stringop_alg = no_stringop;
etc., but other spots don't.
More information about the Gcc-bugs
mailing list