[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