This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/36874] Add shape checks to cshift/eoshift
- From: "burnus at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Jan 2009 19:41:34 -0000
- Subject: [Bug fortran/36874] Add shape checks to cshift/eoshift
- References: <bug-36874-13404@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #5 from burnus at gcc dot gnu dot org 2009-01-24 19:41 -------
(In reply to comment #4)
> After adding the the missing checks to gfc_check_cshift() and
> gfc_check_eoshift() respectively, I get a couple of errors for
> gfortran.dg/zero_sized_1.f90 [...]
Thanks! The errors look OK.
> Are runtime checks required to check the shape of the other arguments if ARRAY
> is zero-sized?
Good question. For completeness, one can add the check, which is also included
in NAG f95 (which does not have a compile-time check):
real, dimension(4,0) :: a,c
integer :: b(1)
c = eoshift (a, shift=b(2:1)) ! OK - shape = 0
c = eoshift (a, shift=b(1)) ! OK - scalar
c = eoshift (a, shift=b(1:1)) ! Wrong: shape = 1 vs. 0
end
Shape mismatch (dimension 1) between ARRAY and SHIFT in CSHIFT
Program terminated by fatal error
In $main$, line 5 of shapetest.f90
In any case, the check should only be enabled with -fbounds-check and enclosed
with if(unlikely(option...)). If the normal program flow is too much
interrupted, one can also think about not adding the run-time check for
zero-sized arrays.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36874