Hi, the following legal code fails to compile with gfortran: % cat gfcbug50.f90 module gfcbug50 implicit none contains subroutine foo (n, y) integer, intent(in) :: n integer, dimension(bar (n)) :: y ! Array bound is specification expression, which is allowed (F2003, sect. 7. 1.6) end subroutine foo pure function bar (n) result (l) integer, intent(in) :: n integer :: l l = n end function bar end module gfcbug50 % gfc -c gfcbug50.f90 gfcbug50.f90:7.23: integer, dimension(bar (n)) :: y 1 Error: Expression at (1) must be of INTEGER type This is wrong. bar(n) is a specification expression. See e.g. the F2003 standard, sect. 7.1.6 Cheers, -ha
This looks quite easy: pure integer function bar (n) integer, intent(in) :: n bar = n end function bar works. Somebody has forgotten to transfer the result typespec to that of the specification expression. Paul
Subject: Bug 30283 Author: pault Date: Mon Jan 15 08:16:17 2007 New Revision: 120790 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=120790 Log: 2007-01-15 Paul Thomas <pault@gcc.gnu.org> PR fortran/28172 * trans-stmt.c (gfc_trans_call): If it does not have one, get a backend_decl for an alternate return. PR fortran/29389 * resolve.c (pure_function): Statement functions are pure. Note that this will have to recurse to comply fully with F95. PR fortran/29712 * resolve.c (resolve_function): Only a reference to the final dimension of an assumed size array is an error in an inquiry function. PR fortran/30283 * resolve.c (resolve_function): Make sure that the function expression has a type. 2007-01-15 Paul Thomas <pault@gcc.gnu.org> PR fortran/28172 * gfortran.dg/altreturn_4.f90: New test. PR fortran/29389 * gfortran.dg/stfunc_4.f90: New test. PR fortran/29712 * gfortran.dg/bound_2.f90: Reinstate commented out line. * gfortran.dg/initialization_1.f90: Change warning. PR fortran/30283 * gfortran.dg/specification_type_resolution_2.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/altreturn_4.f90 trunk/gcc/testsuite/gfortran.dg/specification_type_resolution_2.f90 trunk/gcc/testsuite/gfortran.dg/stfunc_4.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/resolve.c trunk/gcc/fortran/trans-stmt.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gfortran.dg/bound_2.f90 trunk/gcc/testsuite/gfortran.dg/initialization_1.f90
Subject: Bug 30283 Author: pault Date: Tue Jan 23 05:53:14 2007 New Revision: 121077 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=121077 Log: 2007-01-23 Paul Thomas <pault@gcc.gnu.org> Backports from trunk PR fortran/28172 * trans-stmt.c (gfc_trans_call): If it does not have one, get a backend_decl for an alternate return. PR fortran/29389 * resolve.c (pure_function): Statement functions are pure. Note that this will have to recurse to comply fully with F95. PR fortran/29712 * resolve.c (resolve_function): Only a reference to the final dimension of an assumed size array is an error in an inquiry function. PR fortran/30283 * resolve.c (resolve_function): Make sure that the function expression has a type. 2007-01-23 Paul Thomas <pault@gcc.gnu.org> PR fortran/28172 * gfortran.dg/altreturn_4.f90: New test. PR fortran/29389 * gfortran.dg/stfunc_4.f90: New test. PR fortran/29712 * gfortran.dg/bound_2.f90: Reinstate commented out line. * gfortran.dg/initialization_1.f90: Change warning. PR fortran/30283 * gfortran.dg/specification_type_resolution_2.f90: New test. Added: branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/altreturn_4.f90 branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/specification_type_resolution_2.f90 branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/stfunc_4.f90 Modified: branches/gcc-4_2-branch/gcc/fortran/ChangeLog branches/gcc-4_2-branch/gcc/fortran/resolve.c branches/gcc-4_2-branch/gcc/fortran/trans-stmt.c branches/gcc-4_2-branch/gcc/testsuite/ChangeLog branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/bound_2.f90 branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/initialization_1.f90
Fixed on trunk and 4.2 Paul