http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49324
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
Status|UNCONFIRMED |NEW
Last reconfirmed| |2011.06.08 22:12:30
CC| |pault at gcc dot gnu.org
Ever Confirmed|0 |1
Known to fail| |4.3.4, 4.4.0, 4.5.1, 4.6.0,
| |4.7.0
Severity|normal |major
--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-06-08
22:12:30 UTC ---
First: The module http://www.fortran.com/iso_varying_string.f95 is invalid, cf.
PR 49331. (That shouldn't affect this PR.)
Secondly, there seems to be a serious bug in gfortran - and several other
compilers - in the handling of constructors of derived types with allocatable
components. With gfortran, I see three bugs for the following program:
- There is no reallocate on assignment
- The memory is multiple times freed for a normal constructor
- With reshape, the result is wrong (+ one has an invalid free)
Expected: With and without the explicit allocate of z and z2, the program
should print:
11 11 22 22 22
11 11 22 22 22
Actual result (w/ explicit allocate)
11 11 22 22 22
0 0 0 0 -202116348
(Plus segfault)
implicit none
type t
integer, allocatable :: A(:)
end type t
type(t) :: x, y
type(t), allocatable :: z(:), z2(:)
allocate (x%A(2))
allocate (y%A(3))
x%A = 11
y%A = 22
! BUG 1: Realloc LHS does not work,
! hence the following lines are required:
allocate (z(2))
allocate (z2(2))
z = [ x, y ]
print *, z(1)%a, z(2)%a ! OK, if allocated
! BUG 2: Crash with invalid FREE at the the program
! BUG 3: The following produces garbage
z2 = reshape ([ x, y ], [ 2 ])
print *, z2(1)%a, z2(2)%a
end