[Bug fortran/59398] Wrong bounds for allocatable result and for
anlauf at gmx dot de
gcc-bugzilla@gcc.gnu.org
Thu Dec 5 20:34:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59398
Harald Anlauf <anlauf at gmx dot de> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |anlauf at gmx dot de
--- Comment #1 from Harald Anlauf <anlauf at gmx dot de> ---
Sergio,
I'm not sure about the first assignment, but the behavior in
the second case is certainly correct.
On the first assignment, a is not allocated.
On the second assignment, the shape of the RHS is the same,
so you get the same result.
If you modify your program as follows:
program return_allocatable
implicit none
real, allocatable :: a(:)
real, parameter :: b(-2:4)=[1,2,3,4,5,6,7]
a=foo(3)
print*,lbound(a),':',ubound(a)
deallocate (a)
a=b
print*,lbound(a),':',ubound(a)
deallocate (a)
contains
function foo(n)
integer :: n
real, allocatable :: foo(:)
allocate(foo(-3:n))
foo=n
end function
end program
You get:
1 : 7
-2 : 4
which is what you also get with Intel v14 and Crayftn 8.2.1.
However, xlf 14.1.0.5 agrees with you:
-3 : 3
-2 : 4
F2k8 states:
7.2.1.3 Interpretation of intrinsic assignments
If the variable is an unallocated allocatable array, expr shall have the same
rank. If the variable is an allocated
allocatable variable, it is deallocated if expr is an array of different shape,
...
If the variable is or becomes an unallocated allocatable variable, it is then
allocated with
...
• if expr is an array, the shape of expr with each lower bound equal to the
corresponding element of
LBOUND (expr ).
Thus the assignment from the allocatable function result is broken.
More information about the Gcc-bugs
mailing list