Index: gcc/fortran/gfortran.h =================================================================== --- gcc/fortran/gfortran.h (revision 260682) +++ gcc/fortran/gfortran.h (working copy) @@ -1611,6 +1611,9 @@ typedef struct gfc_symbol /* Link to corresponding association-list if this is an associate name. */ struct gfc_association_list *assoc; + + /* Link to derived type list */ + struct gfc_dt_list *dt_list; } gfc_symbol; Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 260682) +++ gcc/fortran/resolve.c (working copy) @@ -13437,14 +13437,13 @@ add_dt_to_dt_list (gfc_symbol *derived) { gfc_dt_list *dt_list; - for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next) - if (derived == dt_list->derived) - return; - - dt_list = gfc_get_dt_list (); - dt_list->next = gfc_derived_types; - dt_list->derived = derived; - gfc_derived_types = dt_list; + if (derived->dt_list == NULL) { + dt_list = gfc_get_dt_list (); + dt_list->next = gfc_derived_types; + dt_list->derived = derived; + derived->dt_list = dt_list; + gfc_derived_types = dt_list; + } }