https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60777
--- Comment #6 from janus at gcc dot gnu.org --- I think the patch in comment 1 actually does not work as expected (due to a spurious semicolon). However, this variant seems to work well and regtests cleanly: Index: gcc/fortran/expr.c =================================================================== --- gcc/fortran/expr.c (revision 241997) +++ gcc/fortran/expr.c (working copy) @@ -2794,12 +2794,12 @@ return false; } - if (f->attr.recursive) - { - gfc_error ("Specification function %qs at %L cannot be RECURSIVE", - f->name, &e->where); + /* F08:7.1.11.6. */ + if (f->attr.recursive + && !gfc_notify_std (GFC_STD_F2003, + "Specification function '%s' " + "at %L cannot be RECURSIVE", f->name, &e->where)) return false; - } function_allowed: return restricted_args (e->value.function.actual); I will commit this soon.