(Re)allocation of allocatable arrays on assignment - F2003
Paul Richard Thomas
paul.richard.thomas@gmail.com
Thu Nov 4 14:36:00 GMT 2010
Dominique,
Thanks a lot - I'll get onto it.
Paul
On Thu, Nov 4, 2010 at 3:19 PM, Dominique Dhumieres <dominiq@lps.ens.fr> wrote:
> Paul,
>
> First the good news:
> (1) regstrapped without regression,
> (2) the reported problems have been fixed.
>
> Now the bad news:
> (1) the last patch woke up one bug of my collection (pr28849)
> with another bound problem:
>
> [macbook] f90/bug% cat pr28849_db.f90
> program gfc_bounds_check
> implicit none
>
> real, parameter :: v(2) = (/ 1., 2. /)
> real, allocatable :: a(:,:), b(:,:)
>
> allocate (a(1,2), b(2,1))
>
> print *, "Assignments with correct shapes after RESHAPE..."
> a(:,:) = reshape (v(:), (/ 1, 2 /) )
> b(:,:) = reshape (v(:), (/ 2, 1 /) )
> ! Verify correctness of assignments
> print *, lbound(a), ubound(a)
> print *, "a(:,1) =", a(:,1)
> print *, lbound(b), ubound(b)
> print *, "b(:,1) =", b(:,1)
>
> print *, "...and with wrong shape (should fail with bounds checking on)"
> a(:,:) = reshape (v(:), (/ 2, 1 /) )
> b(:,:) = reshape (v(:), (/ 1, 2 /) )
> print *, "a(:,1) =", a(:,1)
> print *, lbound(a), ubound(a)
> print *, "b(:,1) =", b(:,1)
> print *, lbound(b), ubound(b)
>
> print *, "Must have missed an array bound violation after RESHAPE..."
>
> end program gfc_bounds_check
> [macbook] f90/bug% gfc -fcheck=all pr28849_db.f90
> [macbook] f90/bug% a.out
> Assignments with correct shapes after RESHAPE...
> 1 1 1 2
> a(:,1) = 1.0000000
> 1 1 2 1
> b(:,1) = 1.0000000 2.0000000
> ...and with wrong shape (should fail with bounds checking on)
> a(:,1) = 1.0000000
> 1 1 1 2
> b(:,1) = 1.0000000 2.0000000
> 1 1 2 1
> Must have missed an array bound violation after RESHAPE...
>
> So either a is relocated as a(2,1) (b as b(1,2)) and the bounds
> are inconsistent, or it is not and there should be a run time
> error as when compiled with -std=f95.
>
> (2) More serious rnflow is miscompiled (again in evlrnf).
> When compiled with -OO, I get
>
> 0: 0: 0.001 -> Read sequence
> 0: 0: 0.466 -> extract extrema
> 0: 0: 0.479 -> Generate raw transitions counts
> 0: 0: 0.499 -> Compute Markov matrix
> 0: 0: 0.500 -> Calculate theoretical rainflow
> a.out(47494) malloc: *** mmap(size=562941464334336) failed (error code=12)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
>
> When compiled with optimization strting at -O1, the test run, but the final
> output is obviously wrong (a regression from the previous patch).
>
> Cheers,
>
> Dominique
>
--
The knack of flying is learning how to throw yourself at the ground and miss.
--Hitchhikers Guide to the Galaxy
More information about the Fortran
mailing list