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

Reply via email to