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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|lto                         |fortran

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, it's CCP, but likely transforming

MEM[p_1] = CLOBBER;

into

derf = CLOBBER;

by means of propagating a p_1 = &derf;

Such clobber is useless but we possibly have to deal with it.  Note I wonder
why
the operand scanner doesn't ICE here ...

Indeed we have

;; Function erfcx_r4 (__error_function_MOD_erfcx_r4, funcdef_no=0,
decl_uid=4215, cgraph_uid=1, symbol_order=0)

__attribute__((fn spec (". r ")))
real(kind=4) erfcx_r4 (real(kind=4) & restrict x)
{
  real(kind=4) __result_erfcx_r4(address-taken);
  static integer(kind=4) jint(address-taken) = 2;
  real(kind=4) (*<T66a>) (real(kind=4) & restrict) erfcx_r4.0_1;
  real(kind=4) _6;

  <bb 2> :
  erfcx_r4.0_1 = erfcx_r4;
  *erfcx_r4.0_1 ={v} {CLOBBER};
  calerf_r4 (x_4(D), &__result_erfcx_r4(address-taken), &jint(address-taken));
  _6 = __result_erfcx_r4(address-taken);

and .original already has

__attribute__((fn spec (". r ")))
real(kind=4) erfcx_r4 (real(kind=4) & restrict x)
{
  static integer(kind=4) jint(address-taken) = 2;
  real(kind=4) __result_erfcx_r4(address-taken);

  erfcx_r4 = {CLOBBER};
  calerf_r4 ((real(kind=4) *) x, &__result_erfcx_r4(address-taken),
&jint(address-taken));
  return __result_erfcx_r4(address-taken);
}

Reply via email to