This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/60500] [4.7/4.8/4.9 Regression] Spurious warning on derived type initialization


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60500

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
          Component|middle-end                  |fortran

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The value is used uninitialized on the work1.data == NULL error path:

                  work1.data = (void * restrict) __builtin_malloc (MAX_EXPR
<D.2352, 1>);
                  if (work1.data == 0B)
                    {
                      stat.0 = 5014;
                    }
                }
              }
          }
        if ((logical(kind=4)) __builtin_expect ((integer(kind=8)) (stat.0 ==
0), 1, 33))
          {
            work1.dtype = 297;
            work1.dim[0].lbound = 1;
            work1.dim[0].ubound = (integer(kind=8)) *n1;
            work1.dim[0].stride = 1;
            work1.offset = -1;
          }
        if ((logical(kind=4)) __builtin_expect ((integer(kind=8)) (stat.0 !=
0), 0, 33)) goto L.1;
        L.1:;
        *st = stat.0;
        {
          struct ntype D.2358;
          struct ntype ntype.3;
          integer(kind=8) D.2356;
          integer(kind=8) D.2355;
          integer(kind=8) D.2354;
          struct ntype[0:] * restrict D.2353;

          D.2353 = (struct ntype[0:] * restrict) work1.data;
          D.2354 = work1.offset;
          D.2355 = work1.dim[0].lbound;
          D.2356 = work1.dim[0].ubound;
          ntype.3.level = 1;
          D.2358 = ntype.3;
          {
            integer(kind=8) S.4;

            S.4 = D.2355;
            while (1)
              {
                if (S.4 > D.2356) goto L.3;
                (*D.2353)[S.4 + D.2354] = D.2358;
                S.4 = S.4 + 1;
              }
            L.3:;

possibly the L.1 label is misplaced?  At least the result would crash if
malloc returned NULL.

Frontend wrong-code bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]