From: Harald Anlauf Date: Fri, 1 Jan 2021 17:55:41 +0000 (+0100) Subject: PR fortran/96381 - invalid read in gfc_find_derived_vtab X-Git-Tag: upstream/12.2.0~10549 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d816b0c144d15e6570eb5b124b9f3ccbe3d40082;p=platform%2Fupstream%2Fgcc.git PR fortran/96381 - invalid read in gfc_find_derived_vtab An invalid declaration of a CLASS instance can lead to an internal state with inconsistent attributes during parsing that needs to be handled with sufficient care when processing subsequent statements. Avoid a lookup of the vtab entry for such cases. gcc/fortran/ChangeLog: * class.c (gfc_find_vtab): Add check on attribute is_class. --- diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 5677d92..783e4c7 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -2906,7 +2906,9 @@ gfc_find_vtab (gfc_typespec *ts) case BT_DERIVED: return gfc_find_derived_vtab (ts->u.derived); case BT_CLASS: - if (ts->u.derived->components && ts->u.derived->components->ts.u.derived) + if (ts->u.derived->attr.is_class + && ts->u.derived->components + && ts->u.derived->components->ts.u.derived) return gfc_find_derived_vtab (ts->u.derived->components->ts.u.derived); else return NULL;