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