https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95398
Bug ID: 95398 Summary: ICE on invalid code Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: kargl at gcc dot gnu.org Target Milestone: --- Code posted at https://groups.google.com/forum/#!topic/comp.lang.fortran/mW1gV6tyxXk leads to % gfcx -c a.f90 a.f90:32:16: 32 | foo => array1(2,U) | 1 Error: Pointer assignment target is neither TARGET nor POINTER at (1) a.f90:34:16: 34 | foo => array2(2,U) | 1 Error: Pointer assignment target is neither TARGET nor POINTER at (1) f951: internal compiler error: Segmentation fault 0xdf6e3a crash_signal ../../gccx/gcc/toplev.c:328 0x83fb5c resolve_select_type ../../gccx/gcc/fortran/resolve.c:9169 0x83c9a4 gfc_resolve_code(gfc_code*, gfc_namespace*) ../../gccx/gcc/fortran/resolve.c:11908 0x840f78 resolve_codes ../../gccx/gcc/fortran/resolve.c:17197 0x82ba33 gfc_resolve(gfc_namespace*) ../../gccx/gcc/fortran/resolve.c:17232 0x82ba33 gfc_resolve(gfc_namespace*) ../../gccx/gcc/fortran/resolve.c:17211 0x81de68 resolve_all_program_units ../../gccx/gcc/fortran/parse.c:6241 0x81de68 gfc_parse_file() ../../gccx/gcc/fortran/parse.c:6488 0x871858 gfc_be_parse_file ../../gccx/gcc/fortran/f95-lang.c:210 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. This patch fixes the ICE. Do with it what you want. Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 280157) +++ gcc/fortran/resolve.c (working copy) s@@ -9166,7 +9172,9 @@ resolve_select_type (gfc_code *code, gfc_namespace *ol selector_type = CLASS_DATA (code->expr2)->ts.u.derived; } - if (code->expr2->rank && CLASS_DATA (code->expr1)->as) + if (code->expr2->rank + && code->expr1->ts.type == BT_CLASS + && CLASS_DATA (code->expr1)->as) CLASS_DATA (code->expr1)->as->rank = code->expr2->rank; /* F2008: C803 The selector expression must not be coindexed. */