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/31683] bogus warnings with optional arguments



------- Comment #4 from tkoenig at gcc dot gnu dot org  2007-04-24 21:06 -------
There is a questionable practice with the original code:  It uses
pab without a check whether it is present.

The compiler tries to guard against this, partially by generating
(from the *.original dump):

  if (pab != 0B)
    {
      {
        int4 D.1054;

        D.1054 = pab->dim[0].stride;
        stride.1 = D.1054 == 0 ? 1 : D.1054;
        pab.0 = (real8[0:D.1055] *) pab->data;
        ubound.0 = (pab->dim[0].ubound - pab->dim[0].lbound) + 1;
        stride.3 = pab->dim[1].stride;
        ubound.2 = (pab->dim[1].ubound - pab->dim[1].lbound) + 1;
        size.5 = stride.3 * NON_LVALUE_EXPR <ubound.2>;
        offset.4 = -stride.1 - NON_LVALUE_EXPR <stride.3>;
        D.1055 = size.5 - 1;
        D.1056 = (bit_size_type) (<unnamed-unsigned:32>) size.5 * 64;
        D.1057 = (<unnamed-unsigned:32>) size.5 * 8;
      }
    }

All these variables are initialized in this block, and nowhere
else.  Later in the loop, they are used, which generates the warnings.

The if(pab) above doesn't really help because the code will crash, or produce
strange results, if pab isn't present.

This is a very misleading diagnostic, but not a wrong-code as far as I can see.


-- 

tkoenig at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
           Keywords|                            |diagnostic
   Last reconfirmed|0000-00-00 00:00:00         |2007-04-24 21:06:01
               date|                            |
            Summary|bogus warnings /            |bogus warnings with optional
                   |miscompilation              |arguments


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


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