https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93832
--- Comment #5 from markeggleston at gcc dot gnu.org --- Created attachment 47968 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47968&action=edit Incomplete patch Please find att an incomplete patch. program p type t character :: a integer :: b integer :: c(t(1, 2, 3)) end type end results in: 5 | integer :: c(t(1, 2, 3)) | 1 Error: Expression at (1) must be of INTEGER type, found DERIVED pr93832_2.f03:7:19: 5 | integer :: c(t(1, 2, 3)) | 1 Error: Cannot convert INTEGER(4) to CHARACTER(1) at (1) instead of an ICE However the following: program p type t character :: a integer :: b integer :: c(t()) end type end results in 5 | integer :: c(t()) | 1 Error: No initializer for component 'a' given in the structure constructor at (1) I had hoped to report "Error: Expression at (1) must be of INTEGER type, found DERIVED", the closest I managed was "Error: Expression at (1) must be of INTEGER type, found UNKNOWN". Unfortunately that also resulted in duplicate and spurious error messages. As it stands the patch has the following side affect when running check-fortran FAIL: gfortran.dg/typebound_call_25.f90 -O (internal compiler error) FAIL: gfortran.dg/typebound_call_25.f90 -O (test for errors, line 32) FAIL: gfortran.dg/typebound_call_25.f90 -O (test for errors, line 33) FAIL: gfortran.dg/typebound_call_25.f90 -O (test for excess errors) FAIL: gfortran.dg/typebound_proc_31.f90 -O (internal compiler error) FAIL: gfortran.dg/typebound_proc_31.f90 -O (test for excess errors) FAIL: gfortran.dg/typebound_proc_32.f90 -O (internal compiler error) FAIL: gfortran.dg/typebound_proc_32.f90 -O (test for excess errors) typebound_proc_31.f90: ! { dg-do compile } ! ! PR 59450: [OOP] ICE for type-bound-procedure expression in module procedure interface ! ! Contributed by <b...@miller-mohr.de> module classes implicit none type :: base_class contains procedure, nopass :: get_num end type contains pure integer function get_num() end function function get_array( this ) result(array) class(base_class), intent(in) :: this integer, dimension( this%get_num() ) :: array end function end module produces this ICE: f951: internal compiler error: check_restricted(): Unknown expression type 0x6c6ede gfc_report_diagnostic ../../gcc/gcc/fortran/error.c:782 0x6c85ca gfc_internal_error(char const*, ...) ../../gcc/gcc/fortran/error.c:1402 0x6cb6db check_restricted ../../gcc/gcc/fortran/expr.c:3428 0x6964b4 resolve_array_bound ../../gcc/gcc/fortran/array.c:378 0x697180 gfc_resolve_array_spec(gfc_array_spec*, int) ../../gcc/gcc/fortran/array.c:424 0x7406fe resolve_symbol ../../gcc/gcc/fortran/resolve.c:15832 0x7400c1 resolve_symbol ../../gcc/gcc/fortran/resolve.c:15247 0x75c6ab do_traverse_symtree ../../gcc/gcc/fortran/symbol.c:4147 0x742ccc resolve_types ../../gcc/gcc/fortran/resolve.c:17121 0x73e4dc gfc_resolve(gfc_namespace*) ../../gcc/gcc/fortran/resolve.c:17236 0x726aa4 gfc_parse_file() ../../gcc/gcc/fortran/parse.c:6447 0x77206f gfc_be_parse_file ../../gcc/gcc/fortran/f95-lang.c:210 Please submit a full bug report, patch applied to master at f1a681a174cdfb82e62c246d6f4add9a25fc2e43 At this point I'm stuck and I currently don't have the knowledge to fix this.