A simple program that is supposed to invert a permutation P gives wrong result
with gfortran 4.2.1. A quite recent trunk 4.3 gfortran also gave wrong result.
See also discussion in comp.lang.fortran subject "Most elegant syntax for
inverting a permutation?". The concensus seems to be that this forall construct
should work according to the standard.
PROGRAM TST
IMPLICIT NONE
INTEGER :: P(4),I
P = (/2,4,1,3/)
FORALL(I=1:4)
P(P(I)) = I
END FORALL
PRINT *, P
END PROGRAM TST
[EMAIL PROTECTED]:~/> gfortran421 -o tst tst.f90 -static && ./tst
3 1 4 3
[EMAIL PROTECTED]:~/> ifort -o tst tst.f90 && ./tst
tst.f90(5): (col. 3) remark: LOOP WAS VECTORIZED.
3 1 4 2
[EMAIL PROTECTED]:~/>
--
Summary: FORALL loop gives wrong result
Product: gcc
Version: 4.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: enok at lysator dot liu dot se
GCC build triplet: x86_64-unknown-linux-gnu
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33686