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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |WAITING

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The gimple for the cited line looks good to me:

  addarray1 (&class.25, &class.26);
  class.26 ={v} {CLOBBER};
  class.25 ={v} {CLOBBER};
  class.30._data = pt_43->p._data;
  SR.179_160 = MEM[(struct object_array_pointer *)pt_43];
  SR.181_102 = MEM[(struct object_array_pointer *)pt_43 + 12B];
  SR.182_94 = MEM[(struct object_array_pointer *)pt_43 + 16B];
  _53 = pt_43->p._vptr;
  _57 = SR.182_94 * SR.181_102;
  _58 = -_57;
  _60 = _53->_hash;
  switch (_60) <default: <L20>, case 37104555: <L111>>

<L111>:
  _243 = MEM[(struct t[0:] *)SR.179_160][0].i;
  if (_243 != 1)
    goto <bb 36>;
  else
    goto <bb 8>;

  <bb 8>:
  _62 = SR.182_94 + 1;
  _63 = _62 * SR.181_102;
  _64 = _63 - _57;
  _65 = MEM[(struct t[0:] *)SR.179_160][_64].i;
  if (_65 != 2)
    goto <bb 36>;
  else
    goto <bb 9> (<L20>);

we have constant-folded from the initializer of A.28 = [1, 2].

For the testcase (at -O1) we never call native_encode_expr with off != -1
so the only difference can be that we call native_encode_expr more
often or that the code-path for off == -1 changed (which it wasn't supposed
to).

Btw all calls to native_encode_expr are via fold_view_convert_expr ultimately
called from the frontend and all return NULL and thus fail.

So I wonder whether it rather is libgfortran that is miscompiled?  Can you
check running the testcases against an older version?

Reply via email to