https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104908
--- Comment #6 from anlauf at gcc dot gnu.org --- Studying the cases that ICE (CLASS array dummy) and testcase PR95331.f90 which fixes an unlimited polymorphic problem, I tried the following change: diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index f6ddce2d023..be7d42ff847 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -4097,7 +4097,10 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_expr *expr, } decl = se->expr; - if (IS_CLASS_ARRAY (sym) && sym->attr.dummy && ar->as->type != AS_DEFERRED) + if (UNLIMITED_POLY(sym) + && IS_CLASS_ARRAY (sym) + && sym->attr.dummy + && ar->as->type != AS_DEFERRED) decl = sym->backend_decl; cst_offset = offset = gfc_index_zero_node; This is currently regtesting.