[Bug fortran/89069] ICE in select type with function returning class array pointer
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89069 --- Comment #3 from Antony Lewis --- This bug is still valid as of gcc 11.2.1 20220114 15 | end module test | 1 internal compiler error: Segmentation fault 0x160a5b7 internal_error(char const*, ...) ???:0 0x764849 gfc_class_data_get(tree_node*) ???:0 0x7b0111 gfc_trans_block_construct(gfc_code*) ???:0 0x762224 gfc_generate_function_code(gfc_namespace*) ???:0 0x73c1d1 gfc_generate_module_code(gfc_namespace*) ???:0 0x6dd185 gfc_parse_file() ???:0
[Bug fortran/89069] ICE in select type with function returning class array pointer
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89069 G. Steinmetz changed: What|Removed |Added CC||gs...@t-online.de --- Comment #2 from G. Steinmetz --- Update : $ cat z1.f90 program p select type (y => f()) end select contains function f() class(*), pointer :: f(:) end end $ cat z2.f90 program p select type (y => f()) end select contains function f() class(*), allocatable :: f(:) end end $ gfortran-10-20191208 -c z2.f90 f951: internal compiler error: Segmentation fault 0xb800af crash_signal ../../gcc/toplev.c:328 0x6a7c28 resolve_select_type ../../gcc/fortran/resolve.c:9158 0x698564 gfc_resolve_code(gfc_code*, gfc_namespace*) ../../gcc/fortran/resolve.c:11897 0x69a0d7 resolve_codes ../../gcc/fortran/resolve.c:17186 0x69a19e gfc_resolve(gfc_namespace*) ../../gcc/fortran/resolve.c:17221 0x68859c resolve_all_program_units ../../gcc/fortran/parse.c:6241 0x68859c gfc_parse_file() ../../gcc/fortran/parse.c:6488 0x6d306f gfc_be_parse_file ../../gcc/fortran/f95-lang.c:210 --- Similar with associate : $ cat z4.f90 program p associate (y => f()) end associate contains function f() class(*), pointer :: f(:) end end $ cat z5.f90 program p associate (y => f()) end associate contains function f() class(*), allocatable :: f(:) end end $ gfortran-10-20191208 -c z5.f90 z5.f90:2:0: 2 |associate (y => f()) | internal compiler error: Segmentation fault 0xd05dff crash_signal ../../gcc/toplev.c:328 0x744fbc gfc_class_data_get(tree_node*) ../../gcc/fortran/trans-expr.c:189 0x7a03fd trans_associate_var ../../gcc/fortran/trans-stmt.c:2015 0x7a6099 gfc_trans_block_construct(gfc_code*) ../../gcc/fortran/trans-stmt.c:2283 0x709cd7 trans_code ../../gcc/fortran/trans.c:1960 0x74107d gfc_generate_function_code(gfc_namespace*) ../../gcc/fortran/trans-decl.c:6801 0x6bafe6 translate_all_program_units ../../gcc/fortran/parse.c:6302 0x6bafe6 gfc_parse_file() ../../gcc/fortran/parse.c:6541 0x705fcf gfc_be_parse_file ../../gcc/fortran/f95-lang.c:210 --- And finally, above four variants do compile with scalar items, e.g. : $ cat za1.f90 program p select type (y => f()) end select contains function f() class(*), pointer :: f end end $ gfortran-10-20191208 -c za1.f90 $
[Bug fortran/89069] ICE in select type with function returning class array pointer
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89069 Dominique d'Humieres changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2019-01-26 Ever confirmed|0 |1 --- Comment #1 from Dominique d'Humieres --- Confirmed, the backtrace is * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xc0) frame #0: 0x0001000a301c f951`::resolve_select_type(code=0x000142e06170, old_ns=0x000144822e00) at resolve.c:8958 8955 selector_type = CLASS_DATA (code->expr2)->ts.u.derived; 8956 } 8957 -> 8958 if (code->expr2->rank && CLASS_DATA (code->expr1)->as) 8959 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank; 8960 8961 /* F2008: C803 The selector expression must not be coindexed. */ Target 0: (f951) stopped. (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xc0) * frame #0: 0x0001000a301c f951`::resolve_select_type(code=0x000142e06170, old_ns=0x000144822e00) at resolve.c:8958 frame #1: 0x0001000a48c2 f951`gfc_resolve_code(code=, ns=) at resolve.c:11518 frame #2: 0x0001000a6fd5 f951`::resolve_codes(ns=0x000144822e00) at resolve.c:16746 frame #3: 0x0001000a6f0f f951`::resolve_codes(ns=0x000143041600) at resolve.c:16730 frame #4: 0x0001000a70a1 f951`gfc_resolve(ns=0x000143041600) at resolve.c:16781 frame #5: 0x000100094a7e f951`gfc_parse_file() at parse.c:6275 frame #6: 0x0001000dd77c f951`::gfc_be_parse_file() at f95-lang.c:204 frame #7: 0x000100cb0c9a f951`::compile_file() at toplev.c:456 frame #8: 0x000101387114 f951`toplev::main(int, char**) at toplev.c:2176 frame #9: 0x000101386fe0 f951`toplev::main(this=0x7ffeefbff10e, argc=, argv=) frame #10: 0x000101389981 f951`main(argc=2, argv=0x7ffeefbff148) at main.c:39 frame #11: 0x7fff63ab6ed9 libdyld.dylib`start + 1 frame #12: 0x7fff63ab6ed9 libdyld.dylib`start + 1 (lldb) p code->expr1->ts.u.derived (gfc_symbol *) $0 = 0x With 4.8 up to 5 the ICE is end module test ^ internal compiler error: in gfc_conv_array_ref, at fortran/trans-array.c:3218