From 9e1e6e631045c7eed2c72738b7084986d39ca09f Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 14 Jan 2021 19:21:05 +0100 Subject: PR fortran/98661 - valgrind issues with error recovery During error recovery after an invalid derived type specification it was possible to try to resolve an invalid array specification. We now skip this if the component has the ALLOCATABLE or POINTER attribute and the shape is not deferred. gcc/fortran/ChangeLog: PR fortran/98661 * resolve.c (resolve_component): Derived type components with ALLOCATABLE or POINTER attribute shall have a deferred shape. gcc/testsuite/ChangeLog: PR fortran/98661 * gfortran.dg/pr98661.f90: New test. --- gcc/fortran/resolve.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gcc/fortran') diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index f243bd1..ab7ffc2 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -14723,6 +14723,10 @@ resolve_component (gfc_component *c, gfc_symbol *sym) && sym != c->ts.u.derived) add_dt_to_dt_list (c->ts.u.derived); + if (c->as && c->as->type != AS_DEFERRED + && (c->attr.pointer || c->attr.allocatable)) + return false; + if (!gfc_resolve_array_spec (c->as, !(c->attr.pointer || c->attr.proc_pointer || c->attr.allocatable))) -- cgit v1.1