https://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
      Known to work|                            |10.3.1, 12.0
         Resolution|---                         |FIXED

--- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #14)
> So the testcase in comment #5 I think the problem is we can't figure out
> _messages[err] == ((void *) 0 is false.

I think we do fold it, I see

  <bb 4> [local count: 440234144]:
  _2 = _messages[err_6(D)];
  if (_2 == 0B)
    goto <bb 3>; [30.00%]
  else
    goto <bb 5>; [70.00%]

  <bb 5> [local count: 1073741824]:
  # err_5 = PHI <err_6(D)(4), 1(3)>
  # prephitmp_11 = PHI <_2(4), "unknown error"(3)>
  _4 = (long int) prephitmp_11;
  _8 = (int) _4;
  return _8;

and

[changed] ANTIC_IN[5] := { err_5 (0005),
{array_ref<err_5,0,1>,mem_ref<0B>,addr_expr<&_messages>}@.MEM_7(D) (0003),
{nop_expr,_3} (0004), {nop_expr,_4} (0008) }
S[5] := {  }
Created SSA_NAME representative pretmp_9 for expression:{nop_expr,"unknown
error"} (0009)
ANTIC_OUT[4] := { {nop_expr,"unknown error"} (0009), {nop_expr,pretmp_9} (0010)
}

so it's folded during antic compute already.  Works with GCC 10 as well.

Reply via email to