[Bug fortran/42045] [F03] passing a procedure pointer component to a procedure pointer dummy

2009-11-24 Thread janus at gcc dot gnu dot org


--- 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

2009-11-24 Thread janus at gcc dot gnu dot org


--- 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

2009-11-20 Thread janus at gcc dot gnu dot org


--- 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

2009-11-15 Thread janus at gcc dot gnu dot org


--- 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

2009-11-15 Thread janus at gcc dot gnu dot org


--- 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

2009-11-15 Thread janus at gcc dot gnu dot org


--- 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