diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index a65c6dcb994..c8f0bb83c2c 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -8802,10 +8802,6 @@ attr_decl1 (void) m = MATCH_ERROR; goto cleanup; } - else if (sym->ts.type == BT_CLASS - && sym->ts.u.derived->attr.is_class - && sym->old_symbol && sym->old_symbol->as == CLASS_DATA (sym)->as) - sym->old_symbol->as = NULL; add_hidden_procptr_result (sym); diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc index 2ce0f3e4df7..221165d6dac 100644 --- a/gcc/fortran/symbol.cc +++ b/gcc/fortran/symbol.cc @@ -3761,7 +3761,11 @@ free_old_symbol (gfc_symbol *sym) if (sym->old_symbol == NULL) return; - if (sym->old_symbol->as != sym->as) + if (sym->old_symbol->as != NULL + && sym->old_symbol->as != sym->as + && !(sym->ts.type == BT_CLASS + && sym->ts.u.derived->attr.is_class + && sym->old_symbol->as == CLASS_DATA (sym)->as)) gfc_free_array_spec (sym->old_symbol->as); if (sym->old_symbol->value != sym->value)