+++ This bug was initially created as a clone of Bug #30922 +++ gfortran currently does not like the following: ------------------------------------ module x implicit none integer, parameter :: d=8 interface real(d) function y() import end function end interface end module x ------------------------------------ real(d) function y() 1 Error: Parameter 'd' at (1) has not been declared or is a variable, which does not reduce to a constant expression (A real-world example for the latter is: http://users.erols.com/dnagle/pub/pthread.f03, which also needs ISO_C_BINDING support.)
This is probably related to Bug #31229.
Related is the checking of type(*). Here, in decl.c everything is allowed and a later check is missing. Result: accepts invalid: -------------- module x implicit none type t integer :: i end type t interface type(t) function bar() end function end interface end
(In reply to comment #2) This accept-invalid bug is now tracked as PR33334.
Subject: Bug number PR31154 A patch for this bug has been added to the patch tracker. The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-09/msg00618.html
I'd better get on with it! Paul
Subject: Bug number PR31154 A patch for this bug has been added to the patch tracker. The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01901.html
Subject: Bug 31154 Author: pault Date: Tue Oct 2 07:17:01 2007 New Revision: 128948 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=128948 Log: 2007-10-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/31154 PR fortran/31229 PR fortran/33334 * decl.c : Declare gfc_function_kind_locs and gfc_function_type_locus. (gfc_match_kind_spec): Add second argument kind_expr_only. Store locus before trying to match the expression. If the current state corresponds to a function declaration and there is no match to the expression, read to the parenthesis, return kind = -1, dump the expression and return. (gfc_match_type_spec): Renamed from match_type_spec and all references changed. If an interface or an external function, store the locus, set kind = -1 and return. Otherwise, if kind is already = -1, use gfc_find_symbol to try to find a use associated or imported type. match.h : Prototype for gfc_match_type_spec. * parse.c (match_deferred_characteristics): New function. (parse_spec): If in a function, statement is USE or IMPORT or DERIVED_DECL and the function kind=-1, call match_deferred_characteristics. If kind=-1 at the end of the specification expressions, this is an error. * parse.h : Declare external gfc_function_kind_locs and gfc_function_type_locus. 2007-10-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/31154 PR fortran/31229 PR fortran/33334 * gfortran.dg/function_kinds_1.f90: New test. * gfortran.dg/function_kinds_2.f90: New test. * gfortran.dg/derived_function_interface_1.f90: Correct illegal use association into interfaces. Added: trunk/gcc/testsuite/gfortran.dg/function_kinds_1.f90 trunk/gcc/testsuite/gfortran.dg/function_kinds_2.f90 trunk/gcc/testsuite/gfortran.dg/intent_out_2.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/decl.c trunk/gcc/fortran/match.h trunk/gcc/fortran/parse.c trunk/gcc/fortran/parse.h trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
Fixed on trunk Paul