PR fortran/96381 - invalid read in gfc_find_derived_vtab
authorHarald Anlauf <anlauf@gmx.de>
Fri, 1 Jan 2021 17:55:41 +0000 (18:55 +0100)
committerHarald Anlauf <anlauf@gmx.de>
Fri, 1 Jan 2021 17:55:41 +0000 (18:55 +0100)
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.

gcc/fortran/class.c

index 5677d92..783e4c7 100644 (file)
@@ -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;