Le 10/10/2026 à 21:57, Jerry DeLisle a écrit :
See attached patch. SELECT TYPE with an array section of a CLASS array
as the selector, e.g. select type (a => ptr(2:4)), ICEs in
tree_operand_check. When copying _len, trans_associate_var assumes
target_expr is a COMPONENT_REF to _data and strips it with
TREE_OPERAND, but a section gives a bare descriptor. The patch strips
only a COMPONENT_REF and otherwise gets the class container from the
selector expression with gfc_get_class_from_gfc_expr.

The fix is in trans_associate_var in trans-stmt.cc; the rest is the new
test. The bug was found with the Fujitsu compiler test suite; the test
is new.

Regression tested on x86_64.

OK for mainline?

Regards,

Jerry

---

fortran: [PR125760] Fix ICE in SELECT TYPE with array-section selector of a 
class array

In trans_associate_var, get the class container for the _len copy
from the selector expression when target_expr is not a _data
COMPONENT_REF.

Assisted-by: Claude Opus 5.5

        PR fortran/125760

gcc/fortran/ChangeLog:

        * trans-stmt.cc (trans_associate_var): Use
        gfc_get_class_from_gfc_expr when target_expr is not a
        COMPONENT_REF.

gcc/testsuite/ChangeLog:

        * gfortran.dg/select_type_52.f90: New test.
OK.

Reply via email to