[Bug fortran/30404] Wrong FORALL result
pault at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Jan 8 11:23:00 GMT 2007
------- Comment #1 from pault at gcc dot gnu dot org 2007-01-08 11:23 -------
There appears to be a double problem here; the segfault, which I can reproduce
by adding more statements in the forall block that sets a, and the incorrect
rendering of the mask logic, according to where the masking is applied.
The program below illustrates the problem more simply.
I have cc'd Roger Sayle.
Paul
integer, dimension (3, 3) :: a, b, c
logical, dimension (3,3) :: l1 = .FALSE.
integer :: i, j
a = 2
a (1,1) = 1
a (3,3) = 1
a (2,1) = 3
a (2,3) = 3
b = a
c = a
forall (i = 1:3, a(i, 1) == 1) ! mask true for i = 1
forall (j = 1:3, a(2, j) == 3) ! mask true for j = 1,3
b (i, j) = 99 ! set for (i = 1) && (j = 1,3)
l1 (i, j) = .TRUE.
end forall
end forall
forall (i = 1:3, a(i, 1) .lt. 1000)
forall (j = 1:3, l1(i, j)) ! mask true for (i = 1) && (j = 1,3)
c (i, j) = 99 ! SHOULD be set for (i = 1) && (j = 1,3)
end forall
end forall
! forall (i = 1:3) ! this segfaults
forall (i = 1:3, a(i, 1) .lt. 1000)
forall (j = 1:3, &
(a(i, 1) == 1 .and. a(2, j) == 3)) ! mask true for (i = 1) && (j = 1,3)
a (i, j) = 99 ! SHOULD be set for (i = 1) && (j = 1,3)
end forall
end forall
print *, a ! a remains unchanged for gfortran
print *, b ! b is changed correctly
print *, c ! c(2,:) == 99 *sigh*
! Other compilers end up with a == b == c
end
--
pault at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |sayle at gcc dot gnu dot org
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2007-01-08 11:23:23
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30404
More information about the Gcc-bugs
mailing list