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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |NEW
   Target Milestone|---                         |7.4
            Summary|[7 Regression] (Maybe)      |[7/8/9 Regression] (Maybe)
                   |uninitialized descriptor    |uninitialized descriptor
                   |fields of an allocatable    |fields of an allocatable
                   |array component of a        |array component of a
                   |function result             |function result

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
FE issue.  It emits

reduce (struct __class_test_Grid_t & restrict g)
{
  struct grid res;

  res.mask.data = 0B;
  {
...
    D.3608 = (integer(kind=4)[0:] * restrict) g->_data->mask.data;
    D.3609 = g->_data->mask.offset;
    D.3610 = g->_data->mask.dim[0].lbound;
    D.3611 = g->_data->mask.dim[0].ubound;
    D.3612 = g->_data->mask.dim[1].lbound;
    D.3613 = g->_data->mask.dim[1].ubound;
    D.3614 = g->_data->mask.dim[2].lbound;
    D.3615 = g->_data->mask.dim[2].ubound;
    D.3616 = (integer(kind=4)[0:] * restrict) res.mask.data;
    D.3617 = res.mask.offset;
    D.3618 = res.mask.dim[0].lbound;
    D.3619 = res.mask.dim[0].ubound;
    D.3620 = res.mask.dim[1].lbound;
    D.3621 = res.mask.dim[1].ubound;
    D.3622 = res.mask.dim[2].lbound;
    D.3623 = res.mask.dim[2].ubound;
    D.3624 = D.3618 - D.3610;
    D.3625 = D.3620 - D.3612;
    D.3626 = D.3622 - D.3614;

thus loads res.mask.dim[] and computes things with it before initializing.
That also means on archs with NaT (IA64) it might even trap.

Reply via email to