https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103312
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC|kargl at gcc dot gnu.org |
--- Comment #2 from kargl at gcc dot gnu.org ---
Not regression tested. Allows the code to compile.
I don't use CLASS, so have not idea if this is correct.
The code in gfc_find_component is set up for only TYPE,
UNION, and STRUCT. See the assert.
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 93118ad3455..997fa0d7848 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -1692,8 +1692,10 @@ generate_finalization_wrapper (gfc_symbol *derived,
gfc_namespace *ns,
final->attr.artificial = 1;
final->attr.always_explicit = 1;
final->attr.if_source = expr_null_wrapper ? IFSRC_IFBODY : IFSRC_DECL;
- if (ns->proc_name->attr.flavor == FL_MODULE)
+
+ if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
final->module = ns->proc_name->name;
+
gfc_set_sym_referenced (final);
gfc_commit_symbol (final);
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 8c9a1d00ce0..52d47b8b872 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -2492,6 +2492,8 @@ gfc_find_component (gfc_symbol *sym, const char *name,
if (sym->attr.flavor == FL_DERIVED)
sym = gfc_use_derived (sym);
+ else if (sym->ts.type == BT_DERIVED)
+ sym = gfc_use_derived (sym->ts.u.derived);
else
gcc_assert (gfc_fl_struct (sym->attr.flavor));