[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy
--- Comment #5 from janus at gcc dot gnu dot org 2009-11-24 08:16 --- Subject: Bug 42045 Author: janus Date: Tue Nov 24 08:16:32 2009 New Revision: 154492 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=154492 Log: 2009-11-24 Janus Weil ja...@gcc.gnu.org PR fortran/42045 * resolve.c (resolve_actual_arglist): Make sure procedure pointer actual arguments are resolved correctly. (resolve_function): An EXPR_FUNCTION which is a procedure pointer component, has already been resolved. (resolve_fl_derived): Procedure pointer components should not be implicitly typed. 2009-11-24 Janus Weil ja...@gcc.gnu.org PR fortran/42045 * gfortran.dg/proc_ptr_comp_2.f90: Correct invalid test case. * gfortran.dg/proc_ptr_comp_3.f90: Extended test case. * gfortran.dg/proc_ptr_comp_24.f90: New. Added: trunk/gcc/testsuite/gfortran.dg/proc_ptr_comp_24.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/resolve.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gfortran.dg/proc_ptr_comp_2.f90 trunk/gcc/testsuite/gfortran.dg/proc_ptr_comp_3.f90 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42045
[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy
--- Comment #6 from janus at gcc dot gnu dot org 2009-11-24 08:18 --- Fixed with r154492. Closing. -- janus at gcc dot gnu dot org changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42045
[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy
--- Comment #4 from janus at gcc dot gnu dot org 2009-11-20 17:24 --- With this patch Index: gcc/fortran/resolve.c === --- gcc/fortran/resolve.c (revision 154369) +++ gcc/fortran/resolve.c (working copy) @@ -1321,6 +1321,8 @@ resolve_actual_arglist (gfc_actual_arglist *arg, p e-rank = comp-as-rank; e-expr_type = EXPR_FUNCTION; } + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; goto argument_list; } @@ -2519,6 +2521,10 @@ resolve_function (gfc_expr *expr) if (expr-symtree) sym = expr-symtree-n.sym; + /* If this is a procedure pointer component, it has already been resolved. */ + if (gfc_is_proc_ptr_comp (expr, NULL)) +return SUCCESS; + if (sym sym-attr.intrinsic resolve_intrinsic (sym, expr-where) == FAILURE) return FAILURE; @@ -10219,8 +10225,9 @@ resolve_fl_derived (gfc_symbol *sym) } else if (c-attr.proc_pointer c-ts.type == BT_UNKNOWN) { - c-ts = *gfc_get_default_type (c-name, NULL); - c-attr.implicit_type = 1; + /* Since PPCs are not implicitly typed, a PPC without an explicit +interface must be a subroutine. */ + gfc_add_subroutine (c-attr, c-name, c-loc); } /* Procedure pointer components: Check PASS arg. */ the only remaining regression is proc_ptr_comp_2.f90, which is invalid with respect to the interpretation in http://www.j3-fortran.org/doc/year/09/09-236r1.txt. -- janus at gcc dot gnu dot org changed: What|Removed |Added AssignedTo|unassigned at gcc dot gnu |janus at gcc dot gnu dot org |dot org | Status|UNCONFIRMED |ASSIGNED Ever Confirmed|0 |1 Last reconfirmed|-00-00 00:00:00 |2009-11-20 17:24:11 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42045
[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy
--- Comment #1 from janus at gcc dot gnu dot org 2009-11-15 12:39 --- Cf. also PR39997, the discussion in http://j3-fortran.org/pipermail/j3/2009-May/002736.html and follow-ups, and http://www.j3-fortran.org/doc/year/09/09-236r1.txt (which seems to confirm that the test case is valid). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42045
[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy
--- Comment #2 from janus at gcc dot gnu dot org 2009-11-15 12:50 --- With the following patch, the errors go away: Index: gcc/fortran/resolve.c === --- gcc/fortran/resolve.c (revision 154188) +++ gcc/fortran/resolve.c (working copy) @@ -10217,11 +10217,6 @@ resolve_fl_derived (gfc_symbol *sym) return FAILURE; } } - else if (c-attr.proc_pointer c-ts.type == BT_UNKNOWN) - { - c-ts = *gfc_get_default_type (c-name, NULL); - c-attr.implicit_type = 1; - } /* Procedure pointer components: Check PASS arg. */ if (c-attr.proc_pointer !c-tb-nopass c-tb-pass_arg_num == 0) but then one gets: internal compiler error: in gfc_walk_variable_expr, at fortran/trans-array.c:6308 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42045
[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy
--- Comment #3 from janus at gcc dot gnu dot org 2009-11-15 14:24 --- (In reply to comment #2) internal compiler error: in gfc_walk_variable_expr, at fortran/trans-array.c:6308 The ICE goes away when adding this: Index: gcc/fortran/resolve.c === --- gcc/fortran/resolve.c (revision 154188) +++ gcc/fortran/resolve.c (working copy) @@ -1321,6 +1321,8 @@ resolve_actual_arglist (gfc_actual_arglist *arg, p e-rank = comp-as-rank; e-expr_type = EXPR_FUNCTION; } + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; goto argument_list; } The patch in comment #2 however triggers the following regressions: FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O0 (test for excess errors) FAIL: gfortran.dg/proc_ptr_comp_18.f90 -O0 (test for excess errors) FAIL: gfortran.dg/proc_ptr_comp_19.f90 -O0 (test for excess errors) FAIL: gfortran.dg/proc_ptr_comp_2.f90 -O0 (test for excess errors) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42045