diff options
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index ef8931d..8ad52d2 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -2110,6 +2110,22 @@ endType: || c->attr.access == ACCESS_PRIVATE || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.private_comp)) sym->attr.private_comp = 1; + + /* Fix up incomplete CLASS components. */ + if (c->ts.type == BT_CLASS) + { + gfc_component *data; + gfc_component *vptr; + gfc_symbol *vtab; + data = gfc_find_component (c->ts.u.derived, "$data", true, true); + vptr = gfc_find_component (c->ts.u.derived, "$vptr", true, true); + if (vptr->ts.u.derived == NULL) + { + vtab = gfc_find_derived_vtab (data->ts.u.derived, false); + gcc_assert (vtab); + vptr->ts.u.derived = vtab->ts.u.derived; + } + } } if (!seen_component) |