https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101085
Bug ID: 101085 Summary: ICE in gfc_conv_intrinsic_to_class, at fortran/trans-expr.c:1039 Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: gs...@t-online.de Target Milestone: --- This invalid code z1 (rank mismatch scalar versus array) affects versions down to r7. Case z2 is a correct variant of z1, similar invalid case z3 is detected (integer instead of character) : $ cat z1.f90 program p type t integer :: n end type class(t), allocatable :: c(:) character(3) :: a = 'abc' c = [t(1)] if ( f(c, a) /= 1 ) stop 1 contains integer function f(x, y) class(t) :: x(:) class(*) :: y(size(x)) f = size(y) end end $ gfortran-12-20210613 -c z1.f90 z1.f90:8:8: 8 | if ( f(c, a) /= 1 ) stop 1 | 1 internal compiler error: in fold_convert_loc, at fold-const.c:2553 0x9b26a3 fold_convert_loc(unsigned int, tree_node*, tree_node*) ../../gcc/fold-const.c:2553 0x7d4c5b gfc_conv_intrinsic_to_class(gfc_se*, gfc_expr*, gfc_typespec) ../../gcc/fortran/trans-expr.c:1039 0x7d5e65 gfc_conv_procedure_call(gfc_se*, gfc_symbol*, gfc_actual_arglist*, gfc_expr*, vec<tree_node*, va_gc, vl_embed>*) ../../gcc/fortran/trans-expr.c:5878 0x7cdaca gfc_conv_expr(gfc_se*, gfc_expr*) ../../gcc/fortran/trans-expr.c:9017 0x7cde9d gfc_conv_expr_op ../../gcc/fortran/trans-expr.c:3883 0x7cde9d gfc_conv_expr(gfc_se*, gfc_expr*) ../../gcc/fortran/trans-expr.c:9013 0x7d0993 gfc_conv_expr_val(gfc_se*, gfc_expr*) ../../gcc/fortran/trans-expr.c:9070 0x80dcf9 gfc_trans_if_1 ../../gcc/fortran/trans-stmt.c:1469 0x8158aa gfc_trans_if(gfc_code*) ../../gcc/fortran/trans-stmt.c:1507 0x79f9c7 trans_code ../../gcc/fortran/trans.c:2006 0x7c6054 gfc_generate_function_code(gfc_namespace*) ../../gcc/fortran/trans-decl.c:6893 0x74c876 translate_all_program_units ../../gcc/fortran/parse.c:6461 0x74c876 gfc_parse_file() ../../gcc/fortran/parse.c:6730 0x798bbf gfc_be_parse_file ../../gcc/fortran/f95-lang.c:212