The following test case

function bug(self,strvec) result(res)
  character(*) :: self
  character(*), dimension(:), intent(in) :: strvec
  logical(kind=kind(.true.)) :: res

  res = any(index(strvec,spread(self,1,size(strvec))) /= 0)
end function

triggers this ICE

#0  0x0000000080070008 in gfc_conv_function_call (se=0x3ffffffdfc0,
sym=0x8059e770, arg=0x8059d850)
    at ../../gcc-4_1/gcc/fortran/trans-expr.c:1542
#1  0x0000000080074256 in gfc_conv_intrinsic_funcall (se=0x3ffffffdfc0,
expr=0x8059e040)
    at ../../gcc-4_1/gcc/fortran/trans-intrinsic.c:1257
#2  0x0000000080077220 in gfc_conv_intrinsic_function (se=0x3ffffffdfc0,
expr=0x8059e040)
    at ../../gcc-4_1/gcc/fortran/trans-intrinsic.c:3256
#3  0x0000000080070576 in gfc_conv_function_expr (se=0x3ffffffdfc0,
expr=0x8059d850) at ../../gcc-4_1/gcc/fortran/trans-expr.c:1951
#4  0x00000000800709e0 in gfc_conv_expr (se=0x3ffffffdfc0, expr=0x8059e040) at
../../gcc-4_1/gcc/fortran/trans-expr.c:2314
#5  0x0000000080066e5e in gfc_add_loop_ss_code (loop=0x3ffffffe1d0,
ss=0x8059e470, subscript=0 '\0')
    at ../../gcc-4_1/gcc/fortran/trans-array.c:1480
#6  0x0000000080067346 in gfc_conv_loop_setup (loop=0x3ffffffe1d0) at
../../gcc-4_1/gcc/fortran/trans-array.c:2732
#7  0x00000000800743a2 in gfc_conv_intrinsic_anyall (se=0x3fffffff290,
expr=0x80572730, op=101)
    at ../../gcc-4_1/gcc/fortran/trans-intrinsic.c:1323
#8  0x00000000800779e4 in gfc_conv_intrinsic_function (se=0x3fffffff290,
expr=0x8059d3a0)
    at ../../gcc-4_1/gcc/fortran/trans-intrinsic.c:2991
#9  0x0000000080070576 in gfc_conv_function_expr (se=0x3fffffff290,
expr=0x8059d850) at ../../gcc-4_1/gcc/fortran/trans-expr.c:1951
#10 0x00000000800709e0 in gfc_conv_expr (se=0x3fffffff290, expr=0x8059d3a0) at
../../gcc-4_1/gcc/fortran/trans-expr.c:2314
#11 0x0000000080072c86 in gfc_trans_assignment (expr1=0x8059d220,
expr2=0x8059d3a0) at ../../gcc-4_1/gcc/fortran/trans-expr.c:2751
#12 0x00000000800730c8 in gfc_trans_assign (code=0x0) at
../../gcc-4_1/gcc/fortran/trans-expr.c:2813
#13 0x0000000080060a68 in gfc_trans_code (code=0x8059cb50) at
../../gcc-4_1/gcc/fortran/trans.c:493
#14 0x000000008006def8 in gfc_generate_function_code (ns=0x805654d0) at
../../gcc-4_1/gcc/fortran/trans-decl.c:2639
#15 0x0000000080060b60 in gfc_generate_code (ns=0x0) at
../../gcc-4_1/gcc/fortran/trans.c:659
#16 0x0000000080042bd0 in gfc_parse_file () at
../../gcc-4_1/gcc/fortran/parse.c:2680
#17 0x000000008005c0d0 in gfc_be_parse_file (set_yydebug=0) at
../../gcc-4_1/gcc/fortran/f95-lang.c:286
#18 0x00000000802648d0 in toplev_main (argc=7, argv=0x8055e6a0) at
../../gcc-4_1/gcc/toplev.c:990
#19 0x0000000080083fcc in main (argc=0, argv=0x0) at
../../gcc-4_1/gcc/main.c:35

in the line

1542      need_interface_mapping = ((sym->ts.type == BT_CHARACTER
1543                                 && sym->ts.cl->length->expr_type !=
EXPR_CONSTANT)
1544                                || sym->attr.dimension);


because sym->ts.cl->length is NULL.

(gdb) print *sym
$1 = {name = 0x8059ba7c "_gfortran_spread_char_scalar", module = 0x0,
declared_at = {nextc = 0x80578268 "", lb = 0x80578240},
  ts = {type = BT_CHARACTER, kind = 1, derived = 0x0, cl = 0x80572730}, attr =
{allocatable = 0, dimension = 1, external = 1,
    intrinsic = 0, optional = 0, pointer = 0, save = 0, target = 0, dummy = 0,
result = 0, assign = 0, data = 0, use_assoc = 0,
    in_namelist = 0, in_common = 0, in_equivalence = 0, function = 1,
subroutine = 0, generic = 0, implicit_type = 0, untyped = 0,
    sequence = 0, elemental = 0, pure = 0, recursive = 0, unmaskable = 0,
masked = 0, contained = 0, noreturn = 0, entry = 0,
    entry_master = 0, mixed_entry_master = 0, always_explicit = 1, referenced =
0, is_main_program = 0, access = ACCESS_UNKNOWN,
    intent = INTENT_UNKNOWN, flavor = FL_PROCEDURE, if_source = IFSRC_UNKNOWN,
proc = PROC_INTRINSIC, cray_pointer = 0,
    cray_pointee = 0}, generic = 0x0, component_access = ACCESS_UNKNOWN, formal
= 0x0, formal_ns = 0x0, value = 0x0,
  as = 0x8059e8a0, result = 0x8059e770, components = 0x0, cp_pointer = 0x0,
common_next = 0x0, common_head = 0x0, dummy_order = 0,
  namelist = 0x0, namelist_tail = 0x0, old_symbol = 0x0, tlink = 0x0, mark = 0,
new = 0, equiv_built = 0, refs = 0, ns = 0x0,
  backend_decl = 0x0}

(gdb) print *sym->ts.cl
$2 = {length = 0x0, next = 0x0, backend_decl = 0x200001f8460}


-- 
           Summary: Segmentation fault in gfc_conv_function_call
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: uweigand at gcc dot gnu dot org


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

Reply via email to