[Bug fortran/78171] example with undefined symbol compiles with '-O1 -fcheck=pointer'
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Oct 31 18:28:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78171
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
CC| |kargl at gcc dot gnu.org
Resolution|--- |WONTFIX
--- Comment #1 from kargl at gcc dot gnu.org ---
(In reply to Patrick Seewald from comment #0)
> This should not compile because 'foo' is undefined:
>
> PROGRAM example
> IMPLICIT NONE
> REAL, ALLOCATABLE, DIMENSION(:) :: array
> CALL foo(array)
> END PROGRAM example
>
> However it compiles with 'gfortran -O1 -fcheck=pointer example.f90'. If I
> run the executable, I get:
>
> At line 4 of file example.f90
> Fortran runtime error: Allocatable actual argument 'array' is not allocated
A Fortran processor is not required to diagnosis this problem.
It is the programmers responsibility to ensure that 'array' has
been allocated before it is referenced.
F2008, p. 129
An allocatable variable has a status of "unallocated" if
it is not allocated. The status of an allocatable variable
becomes unallocated if it is deallocated (6.7.3) or if it
is given that status by the allocation transfer procedure.
An allocatable variable with this status shall not be
referenced or defined. It shall not be supplied as an actual
argument corresponding to a nonallocatable dummy argument,
except to certain intrinsic inquiry functions.
Those "shall not"s in the above passage from the standard are
prohibitions on the programmer. While the above code is trivial
and doing a compile-time check may seem easy, it is rather
daunting in a general case and can to lead to a substantial
performance impact for correctly written code. This is why
'-fcheck = ' exists. It allows a programmer to turn on additional
checking, and should be used during development and testing.
More information about the Gcc-bugs
mailing list