diff options
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index c67e99400f2..59296b104fa 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -1878,15 +1878,11 @@ parse_derived (void) unexpected_eof (); case ST_DATA_DECL: + case ST_PROCEDURE: accept_statement (st); seen_component = 1; break; - case ST_PROCEDURE: - gfc_error ("PROCEDURE binding at %C must be inside CONTAINS"); - error_flag = 1; - break; - case ST_FINAL: gfc_error ("FINAL declaration at %C must be inside CONTAINS"); error_flag = 1; @@ -1993,6 +1989,12 @@ endType: || (c->ts.type == BT_DERIVED && c->ts.derived->attr.pointer_comp)) sym->attr.pointer_comp = 1; + /* Look for procedure pointer components. */ + if (c->attr.proc_pointer + || (c->ts.type == BT_DERIVED + && c->ts.derived->attr.proc_pointer_comp)) + sym->attr.proc_pointer_comp = 1; + /* Look for private components. */ if (sym->component_access == ACCESS_PRIVATE || c->attr.access == ACCESS_PRIVATE |