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

Reply via email to