The following program gives wrong answers when an array is used in an array constructor as an argument to IEOR. Dick Hendrickson program try_fa6077 ! fails on Windows XP ! gcc version 4.4.0 20080312 (experimental) [trunk revision 133139] call fa6077 ( 10, 1, -1, (/1,2,3,4,5,6,7,8,9,10/)) end subroutine FA6077 (nf10,nf1,mf1, ida) INTEGER IDA1(10) INTEGER IDA2(10), ida(10) IDA1 = IEOR((/1,2,3,4,5,6,7,8,9,10/), $ (/(IDA(J1),J1=10,1,-1)/) ) IDA2 = IEOR ((/1,2,3,4,5,6,7,8,9,10/), (/10,9,8,7,6,5,4,3,2,1/) ) print '(10i3)', (/1,2,3,4,5,6,7,8,9,10/), $ (/10,9,8,7,6,5,4,3,2,1/),ida1,ida2 END SUBROUTINE c:\gfortran:gfortran fa6077.f c:\gfortran:a 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 8 10 4 2 0 2 4 10 8 10 11 11 11 3 3 3 3 11 11 11
Confirmed, a regression: $ gfortran foo.f $ ./a.out 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 8 10 4 2 0 2 4 10 8*** 11 11 11 3 3 3 3 11 11 11 $ ifort foo.f $ ./a.out 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 11 11 11 3 3 3 3 11 11 11 11 11 11 3 3 3 3 11 11 11 $ gfortran-4.2 foo.f $ ./a.out 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 11 11 11 3 3 3 3 11 11 11 11 11 11 3 3 3 3 11 11 11 $ gfortran-4.3 -static foo.f $ ./a.out 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 8 10 4 2 0 2 4 10 8 10 11 11 11 3 3 3 3 11 11 11
I have started a regression hunt on this one. If any one finds the problem, let me know, the hunt could take a while.
(In reply to comment #2) > I have started a regression hunt on this one. If any one finds the problem, > let me know, the hunt could take a while. > Jerry, In fixing PR35946, I have fixed this fella too:) Call off the hounds! Cheers Paul
Subject: Bug 35947 Author: pault Date: Sat Apr 19 21:55:24 2008 New Revision: 134472 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=134472 Log: 2008-04-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/35944 PR fortran/35946 PR fortran/35947 * trans_array.c (gfc_trans_array_constructor): Temporarily realign loop, if loop->from is not zero, before creating the temporary array and provide an offset. PR fortran/35959 * trans-decl.c (gfc_init_default_dt): Add gfc_ prefix to name and allow for NULL body. Change all references from init_default_dt to gfc_init_default_dt. * trans.h : Add prototype for gfc_init_default_dt. * trans-array.c (gfc_trans_deferred_vars): After nullification call gfc_init_default_dt for derived types with allocatable components. 2008-04-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/35944 PR fortran/35946 PR fortran/35947 * gfortran.dg/array_constructor_23.f: New test. PR fortran/35959 * gfortran.dg/alloc_comp_default_init_2.f90: New test. * gfortran.dg/alloc_comp_basics_1.f90: Change occurrences of "builtin_free" to 27. * gfortran.dg/alloc_comp_constructor_1.f90: Change occurrences of "builtin_free" to 21. Added: trunk/gcc/testsuite/gfortran.dg/alloc_comp_default_init_2.f90 trunk/gcc/testsuite/gfortran.dg/array_constructor_23.f Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/trans-array.c trunk/gcc/fortran/trans-decl.c trunk/gcc/fortran/trans.h trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90 trunk/gcc/testsuite/gfortran.dg/alloc_comp_constructor_1.f90
Subject: Bug 35947 Author: pault Date: Sat Apr 19 22:30:03 2008 New Revision: 134475 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=134475 Log: 2008-04-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/35944 PR fortran/35946 PR fortran/35947 * trans_array.c (gfc_trans_array_constructor): Temporarily realign loop, if loop->from is not zero, before creating the temporary array and provide an offset. PR fortran/35959 * trans-decl.c (gfc_init_default_dt): Add gfc_ prefix to name and allow for NULL body. Change all references from init_default_dt to gfc_init_default_dt. * trans.h : Add prototype for gfc_init_default_dt. * trans-array.c (gfc_trans_deferred_vars): After nullification call gfc_init_default_dt for derived types with allocatable components. 2008-04-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/35944 PR fortran/35946 PR fortran/35947 * gfortran.dg/array_constructor_23.f: New test. PR fortran/35959 * gfortran.dg/alloc_comp_default_init_2.f90: New test. * gfortran.dg/alloc_comp_basics_1.f90: Change occurrences of "builtin_free" to 27. * gfortran.dg/alloc_comp_constructor_1.f90: Change occurrences of "builtin_free" to 21. Added: branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/alloc_comp_default_init_2.f90 branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/array_constructor_23.f Modified: branches/gcc-4_3-branch/gcc/fortran/ChangeLog branches/gcc-4_3-branch/gcc/fortran/trans-array.c branches/gcc-4_3-branch/gcc/fortran/trans-decl.c branches/gcc-4_3-branch/gcc/fortran/trans.h branches/gcc-4_3-branch/gcc/testsuite/ChangeLog branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90 branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/alloc_comp_constructor_1.f90
Fixed on trunk and 4.3. Thanks for the report. Paul