aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2018-08-22 19:10:00 +0200
committerJanus Weil <janus@gcc.gnu.org>2018-08-22 19:10:00 +0200
commit00cad178a359da70204fe1ef4072f3bdbccb799c (patch)
treef646b8c67f7b4755ed8483f32f8217ae818b106b /gcc/fortran/resolve.c
parentb56b07639b1bd36383a0763ba80260c4858160ed (diff)
downloadgcc-00cad178a359da70204fe1ef4072f3bdbccb799c.zip
gcc-00cad178a359da70204fe1ef4072f3bdbccb799c.tar.gz
gcc-00cad178a359da70204fe1ef4072f3bdbccb799c.tar.bz2
re PR fortran/86888 ([F08] allocatable components of indirectly recursive type)
fix PR 86888 2018-08-22 Janus Weil <janus@gcc.gnu.org> PR fortran/86888 * decl.c (gfc_match_data_decl): Allow allocatable components of indirectly recursive type. * resolve.c (resolve_component): Remove two errors messages ... (resolve_fl_derived): ... and replace them by a new one. 2018-08-22 Janus Weil <janus@gcc.gnu.org> PR fortran/86888 * gfortran.dg/alloc_comp_basics_6.f90: Update an error message and add an additional case. * gfortran.dg/alloc_comp_basics_7.f90: New test case. * gfortran.dg/class_17.f03: Update error message. * gfortran.dg/class_55.f90: Ditto. * gfortran.dg/dtio_11.f90: Update error messages. * gfortran.dg/implicit_actual.f90: Add an error message. * gfortran.dg/typebound_proc_12.f90: Update error message. From-SVN: r263782
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index d65118d..4ad4dcf 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -14001,28 +14001,6 @@ resolve_component (gfc_component *c, gfc_symbol *sym)
CLASS_DATA (c)->ts.u.derived
= gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
- if (!sym->attr.is_class && c->ts.type == BT_DERIVED && !sym->attr.vtype
- && c->attr.pointer && c->ts.u.derived->components == NULL
- && !c->ts.u.derived->attr.zero_comp)
- {
- gfc_error ("The pointer component %qs of %qs at %L is a type "
- "that has not been declared", c->name, sym->name,
- &c->loc);
- return false;
- }
-
- if (c->ts.type == BT_CLASS && c->attr.class_ok
- && CLASS_DATA (c)->attr.class_pointer
- && CLASS_DATA (c)->ts.u.derived->components == NULL
- && !CLASS_DATA (c)->ts.u.derived->attr.zero_comp
- && !UNLIMITED_POLY (c))
- {
- gfc_error ("The pointer component %qs of %qs at %L is a type "
- "that has not been declared", c->name, sym->name,
- &c->loc);
- return false;
- }
-
/* If an allocatable component derived type is of the same type as
the enclosing derived type, we need a vtable generating so that
the __deallocate procedure is created. */
@@ -14258,6 +14236,13 @@ resolve_fl_derived (gfc_symbol *sym)
&sym->declared_at))
return false;
+ if (sym->components == NULL && !sym->attr.zero_comp)
+ {
+ gfc_error ("Derived type %qs at %L has not been declared",
+ sym->name, &sym->declared_at);
+ return false;
+ }
+
/* Resolve the finalizer procedures. */
if (!gfc_resolve_finalizers (sym, NULL))
return false;