http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50069
--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-08-17 08:44:30 UTC --- (In reply to comment #2) > Draft patch: This patch fails for gfortran.dg/forall_12.f90 test (of PR31217 and PR33811): character(LEN=12) :: a(2) = "123456789012" forall (i = 3:10) a(:)(i:i+2) = a(:)(i-2:i) The result with the patch is 12@+@+ instead of 121234567890 * * * For the test of comment 0, gfortran (unpatched) produces: atmp.1.offset = 0; and accesses atmp.1.data)[atmp.1.offset + 1] While for the now failing test case forall_12.f90, gfortran (unpatched) produces also atmp.1.offset = 0; but uses D.1578 = atmp.1.offset; D.1577 = ... atmp.1.data; &(*D.1577)[S.5 + D.1578] where S.5 is the loop variable, which runs from 0 to 1. Thus, the actual problem seems to be that "a(1)" is translated into "a[1+offset]" instead of "a[0+offset]".