http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45521
janus at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
AssignedTo|unassigned at gcc dot |janus at gcc dot gnu.org
|gnu.org |
--- Comment #12 from janus at gcc dot gnu.org 2012-04-20 12:58:24 UTC ---
(In reply to comment #11)
> For for former, we clearly need to add a check in 'compare_parameter' to
> reject it
Something like:
Index: gcc/fortran/interface.c
===================================================================
--- gcc/fortran/interface.c (revision 186596)
+++ gcc/fortran/interface.c (working copy)
@@ -1663,6 +1667,13 @@ compare_parameter (gfc_symbol *formal, gfc_expr *a
the module variables are generated. */
gfc_find_derived_vtab (actual->ts.u.derived);
+ if (formal->attr.flavor == FL_PROCEDURE && actual->ts.type != BT_PROCEDURE)
+ {
+ if (where)
+ gfc_error ("Procedure argument expected at %L", &actual->where);
+ return 0;
+ }
+
if (actual->ts.type == BT_PROCEDURE)
{
char err[200];
This correctly rejects the invalid code in comment #11 and makes the valid code
in comment #10 give the expected output (without segfaulting).