[Bug fortran/60593] ICE with deferred length variable in FORALL

kargl at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Mar 19 17:38:00 GMT 2014


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |4.9.0

--- Comment #1 from kargl at gcc dot gnu.org ---
% gfc4x -c -Wall h.f90
h.f90: In function 'c2fchar':
h.f90:29:0: internal compiler error: Segmentation fault
       forall (i = 1:c_str_len) res(i:i) = string_p(i)
 ^
no stack trace because unwind library not available
Please submit a full bug report,
with preprocessed source if appropriate.

% cat h.f90

module stringhelper_m

  implicit none

  type :: string_t
     character(:), allocatable :: string
  end type

  interface len
     function strlen(s) bind(c,name='strlen')
       use iso_c_binding
       implicit none
       type(c_ptr), intent(in), value :: s
       integer(c_size_t) :: strlen
     end function
  end interface

  contains

    function C2FChar(c_charptr) result(res)
      use iso_c_binding
      type(c_ptr), intent(in) :: c_charptr
      character(:), allocatable :: res
      character(kind=c_char,len=1), pointer :: string_p(:)
      integer i, c_str_len
      c_str_len = int(len(c_charptr))
      call c_f_pointer(c_charptr, string_p, [c_str_len])
      allocate(character(c_str_len) :: res)
      forall (i = 1:c_str_len) res(i:i) = string_p(i)
    end function

end module

(gdb) run h.f90
Starting program:
/home/sgk/work/4x/libexec/gcc/x86_64-unknown-freebsd11.0/4.9.0/f951 h.f90
 c2fchar
Program received signal SIGSEGV, Segmentation fault.
0x00000000007abaf4 in contains_struct_check (__s=<optimized out>, 
    __f=<optimized out>, __l=<optimized out>, __g=<optimized out>, 
    __t=<optimized out>, __s=<optimized out>, __f=<optimized out>, 
    __l=<optimized out>, __g=<optimized out>) at ../../gcc4x/gcc/tree.h:2822
2822      if (tree_contains_struct[TREE_CODE (__t)][__s] != 1)
(gdb) bt
#0  0x00000000007abaf4 in contains_struct_check (__s=<optimized out>, 
    __f=<optimized out>, __l=<optimized out>, __g=<optimized out>, 
    __t=<optimized out>, __s=<optimized out>, __f=<optimized out>, 
    __l=<optimized out>, __g=<optimized out>) at ../../gcc4x/gcc/tree.h:2822
#1  fold_convert_loc (loc=0, type=0x202c2d7e0, arg=0x0)
    at ../../gcc4x/gcc/fold-const.c:1956
#2  0x00000000006501f3 in allocate_temp_for_forall_nest_1 (type=0x202d6a930, 
    size=0x202d77130, block=0x7fffffffce40, ptemp1=0x7fffffffca50)
    at ../../gcc4x/gcc/fortran/trans-stmt.c:3288
#3  0x0000000000650949 in allocate_temp_for_forall_nest (
    nested_forall_info=<optimized out>, type=<optimized out>, 
    inner_size=<optimized out>, inner_size_body=<optimized out>, 
    block=<optimized out>, ptemp1=<optimized out>, 
    nested_forall_info=<optimized out>, type=<optimized out>, 
    inner_size=<optimized out>, inner_size_body=<optimized out>, 
    block=<optimized out>, ptemp1=<optimized out>)
    at ../../gcc4x/gcc/fortran/trans-stmt.c:3319
#4  gfc_trans_assign_need_temp (expr1=0x2034ac300, expr2=0x2034ac540, 
    wheremask=0x0, invert=false, nested_forall_info=0x2034d13c0, 
    block=0x7fffffffce40) at ../../gcc4x/gcc/fortran/trans-stmt.c:3408
#5  0x000000000064ccb2 in gfc_trans_forall_1 (code=0x2034ac840, 
    nested_forall_info=<optimized out>)
    at ../../gcc4x/gcc/fortran/trans-stmt.c:3886
#6  0x00000000005eb15e in trans_code (code=<optimized out>, cond=0x0)
    at ../../gcc4x/gcc/fortran/trans.c:1786
#7  0x00000000006127cc in gfc_generate_function_code (ns=0x20344b400)
    at ../../gcc4x/gcc/fortran/trans-decl.c:5610
#8  0x00000000005eb5ae in gfc_generate_module_code (ns=<optimized out>)
    at ../../gcc4x/gcc/fortran/trans.c:1972
#9  0x000000000058eb95 in translate_all_program_units (
    gfc_global_ns_list=<optimized out>, main_in_tu=<optimized out>)
    at ../../gcc4x/gcc/fortran/parse.c:4523
#10 gfc_parse_file () at ../../gcc4x/gcc/fortran/parse.c:4733
#11 0x00000000005d72ea in gfc_be_parse_file ()
    at ../../gcc4x/gcc/fortran/f95-lang.c:188
#12 0x0000000000a0978a in compile_file () at ../../gcc4x/gcc/toplev.c:548
#13 0x0000000000a0958b in do_compile () at ../../gcc4x/gcc/toplev.c:1914
#14 toplev_main (argc=2, argv=0x7fffffffd4d8) at ../../gcc4x/gcc/toplev.c:1990
#15 0x00000000005134af in _start ()



More information about the Gcc-bugs mailing list