http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54243
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 #2 from janus at gcc dot gnu.org 2012-08-13 19:21:15 UTC --- I think the proper fix for both this one and PR 54244 would be the following: Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 190186) +++ gcc/fortran/resolve.c (working copy) @@ -5793,6 +5795,9 @@ check_typebound_baseobject (gfc_expr* e) gcc_assert (base->ts.type == BT_DERIVED || base->ts.type == BT_CLASS); + if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok) + return FAILURE; + /* F08:C611. */ if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract) { This aborts the resolution of the type-bound call rather early (if the passed object was not properly declared), avoiding all problems that one could possibly run into later. It is also general enough that it should work for other similar cases.