http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55362
Bug #: 55362 Summary: [4.6/4.7/4.8 Regression] ICE with size() on character pointer Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: domi...@lps.ens.fr >From http://gcc.gnu.org/ml/fortran/2012-11/msg00034.html the following test program ice_test implicit none write(*,*) 'message: ', size(Error_Msg),Error_Msg() contains function Error_Msg() result(ErrorMsg) character, dimension(:), pointer :: ErrorMsg character, dimension(1), target :: str = '!' ErrorMsg => str end function Error_Msg end program ice_test gives an ICE when compiled with 4.6.3, 4.7.2 error_msg.f90:3:0: internal compiler error: in gfc_conv_intrinsic_size, at fortran/trans-intrinsic.c:4427 (4.6) or 5059 (4.7) and trunk (r193382) error_msg.f90:3:0: internal compiler error: in gfc_conv_expr_descriptor, at fortran/trans-array.c:6417 write(*,*) 'message: ', size(Error_Msg),Error_Msg() while 4.5.3 gives an error error_msg.f90:3.31: write(*,*) 'message: ', size(Error_Msg),Error_Msg() 1 Error: Internal procedure 'error_msg' is not allowed as an actual argument at (1) In all cases the ICE occurs in gfc_conv_intrinsic_size (4.6/4.7) or gfc_conv_expr_descriptor (4.8) at gcc_assert (ss != gfc_ss_terminator); Revision 163532 (2010-08-24) gives the error; revision 163841 (2010-09-03) gives the ICE (a lot of changes in this range: f2008 intrinsics and float_128). The backtrace for 4.6 revision 182981 is #1 0x00000001000e62f6 in gfc_conv_intrinsic_function (se=0x7fff5fbfd2a0, expr=0x141d0d870) at ../../p6_work/gcc/fortran/trans-intrinsic.c:4427 #2 0x00000001000d7043 in gfc_conv_function_expr (se=0x7fff5fbfd2a0, expr=<value optimized out>) at ../../p6_work/gcc/fortran/trans-expr.c:4064 #3 0x00000001000d1b33 in gfc_conv_expr_reference (se=0x7fff5fbfd2a0, expr=<value optimized out>) at ../../p6_work/gcc/fortran/trans-expr.c:4889 #4 0x00000001000eabcf in gfc_trans_transfer (code=0x141d0dba0) at ../../p6_work/gcc/fortran/trans-io.c:2314 #5 0x00000001000b01e8 in trans_code (code=0x141d0dba0, cond=0x141c61498) at ../../p6_work/gcc/fortran/trans.c:1382 #6 0x00000001000e8896 in build_dt (function=0x141ef8800, code=0x141d0df60) at ../../p6_work/gcc/fortran/trans-io.c:1838 #7 0x00000001000b0228 in trans_code (code=0x141d0df60, cond=0x0) at ../../p6_work/gcc/fortran/trans.c:1354 #8 0x00000001000caa81 in gfc_generate_function_code (ns=<value optimized out>) at ../../p6_work/gcc/fortran/trans-decl.c:4827 #9 0x000000010006ff1c in gfc_parse_file () at ../../p6_work/gcc/fortran/parse.c:4265 #10 0x00000001000aba36 in gfc_be_parse_file () at ../../p6_work/gcc/fortran/f95-lang.c:250 #11 0x0000000100626b3e in toplev_main (argc=2, argv=0x7fff5fbfd7a8) at ../../p6_work/gcc/toplev.c:579 and for trunk revision 193329 #12 0x00000001000d9162 in gfc_conv_expr_descriptor (se=<value optimized out>, expr=<value optimized out>) at ../../p_work/gcc/fortran/trans-array.c:6417 #13 0x00000001000f827d in gfc_conv_intrinsic_size (se=<value optimized out>, expr=<value optimized out>) at ../../p_work/gcc/fortran/trans-intrinsic.c:5052 #14 0x0000000100104ee6 in gfc_conv_intrinsic_function (se=<value optimized out>, expr=<value optimized out>) at ../../p_work/gcc/fortran/trans-intrinsic.c:6763 #15 0x00000001000eff59 in gfc_conv_expr (se=<value optimized out>, expr=<value optimized out>) at ../../p_work/gcc/fortran/trans-expr.c:5408 #16 0x00000001000f4226 in gfc_conv_expr_reference (se=<value optimized out>, expr=<value optimized out>) at ../../p_work/gcc/fortran/trans-expr.c:6244 #17 0x000000010010b890 in gfc_trans_transfer (code=0x141514b00) at ../../p_work/gcc/fortran/trans-io.c:2307 #18 0x00000001000c7d88 in trans_code (code=0x141514b00, cond=0x141b0ee88) at ../../p_work/gcc/fortran/trans.c:1510 #19 0x0000000100109666 in build_dt (function=0x141b09e00, code=0x141514ec0) at ../../p_work/gcc/fortran/trans-io.c:1831 #20 0x00000001000c7da8 in trans_code (code=0x141514ec0, cond=0x0) at ../../p_work/gcc/fortran/trans.c:1482 #21 0x00000001000e6b14 in gfc_generate_function_code (ns=<value optimized out>) at ../../p_work/gcc/fortran/trans-decl.c:5349 #22 0x000000010008435c in gfc_parse_file () at ../../p_work/gcc/fortran/parse.c:4467 #23 0x00000001000c3e86 in gfc_be_parse_file () at ../../p_work/gcc/fortran/f95-lang.c:191 #24 0x0000000100669989 in compile_file () at ../../p_work/gcc/toplev.c:544 #25 0x000000010066b7e9 in toplev_main(int, char**) (argc=2, argv=0x7fff5fbfd780) at ../../p_work/gcc/toplev.c:1797 #26 0x000000010000a7c4 in start (pc=<value optimized out>, bases=0x0) at ../../../p_work/libgcc/config/unwind-dw2-fde-darwin.c:271