[gcc r11-6405] PR fortran/96381 - invalid read in gfc_find_derived_vtab
Harald Anlauf
anlauf@gcc.gnu.org
Fri Jan 1 17:56:12 GMT 2021
https://gcc.gnu.org/g:d816b0c144d15e6570eb5b124b9f3ccbe3d40082
commit r11-6405-gd816b0c144d15e6570eb5b124b9f3ccbe3d40082
Author: Harald Anlauf <anlauf@gmx.de>
Date: Fri Jan 1 18:55:41 2021 +0100
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:
---
gcc/fortran/class.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 5677d920239..783e4c7354b 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;
More information about the Gcc-cvs
mailing list