The following testcase is extracted from gfortran.dg/pr19928-2.f90. It shows that the array index is evaluated multiple times.
$ cat u.f90 type t integer, dimension (5) :: field end type t type (t), dimension (2) :: a integer :: calls a(1)%field = 0 a(2)%field = 0 calls = 0 if (sum(a(foo(calls))%field) /= 0) call abort if (calls .ne. 1) print *, "bar", calls contains function foo (calls) integer :: calls, foo calls = calls + 1 foo = 2 end function foo end $ gfortran u.f90 && ./a.out $ gfortran u.f90 -fbounds-check && ./a.out bar 3 -- Summary: Multiple evaluation of array index with bounds checking Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: fortran AssignedTo: fxcoudert at gcc dot gnu dot org ReportedBy: fxcoudert at gcc dot gnu dot org OtherBugsDependingO 27766 nThis: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32036