>From a c.l.f post by "prcirrus".

i...@linux-fd1f:~/Krempel/Pack> cat haha.f90
   module te
     type av
     real a1, a2
    end type av
    end module te

    PROGRAM test2
    use te
    parameter (mxrec=10000)
    type(av) dat(mxrec)
    logical mask(mxrec)
    nrec=6000

    mask(1:nrec) = .false.
    dat(1:nrec) = pack(dat(1:nrec),mask(1:nrec))

    END program test2
i...@linux-fd1f:~/Krempel/Pack> gfortran -Warray-temporaries -fbounds-check
haha.f90
haha.f90:15.18:

    dat(1:nrec) = pack(dat(1:nrec),mask(1:nrec))
                  1
Warnung: Creating array temporary at (1)
i...@linux-fd1f:~/Krempel/Pack> ./a.out
i...@linux-fd1f:~/Krempel/Pack>

We create a temporary, which is filled by the pack intrinsic (so no
bounds checking is done), and then later copied.  On the copy, we
miss the bounds violation.


-- 
           Summary: Unneded temporary / missed bounds violation for PACK
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Keywords: missed-optimization, diagnostic
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tkoenig at gcc dot gnu dot org


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

Reply via email to