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));

Reply via email to