------- Comment #15 from dfranke at gcc dot gnu dot org  2007-05-18 22:11 
-------
Eventually, I got a traceable segfault with this shortened testcase:

$> cat pr18923.f90
module FOO
contains
  subroutine FOO
    character(len=selected_int_kind(0)) :: C
  end subroutine
end

Program received signal SIGSEGV, Segmentation fault.
gfc_resolve_expr (e=0x887f8a8) at ../../../gcc/gcc/fortran/resolve.c:1747
1747            expr->ts = expr->symtree->n.sym->result->ts;
(gdb) bt
#0  gfc_resolve_expr (e=0x887f8a8) at ../../../gcc/gcc/fortran/resolve.c:1747
#1  0x08095bbe in resolve_index_expr (e=0x887f380) at
../../../gcc/gcc/fortran/resolve.c:5482
#2  0x08095c2f in resolve_charlen (cl=0x8845148) at
../../../gcc/gcc/fortran/resolve.c:5508
#3  0x0809746f in resolve_types (ns=0x887f020) at
../../../gcc/gcc/fortran/resolve.c:7401
#4  0x08097557 in resolve_types (ns=0x88451b0) at
../../../gcc/gcc/fortran/resolve.c:7414
#5  0x08099bfc in gfc_resolve (ns=0x88451b0) at
../../../gcc/gcc/fortran/resolve.c:7477
#6  0x0808d6ac in gfc_parse_file () at ../../../gcc/gcc/fortran/parse.c:3248
#7  0x080aeabd in gfc_be_parse_file (set_yydebug=0) at
../../../gcc/gcc/fortran/f95-lang.c:303
#8  0x082ffe68 in toplev_main (argc=2, argv=0xbf93d354) at
../../../gcc/gcc/toplev.c:1051
#9  0x080f262f in main (argc=2, argv=0x1) at ../../../gcc/gcc/main.c:35

Most notable point are the identical expressions in this if/else clause
(resolve.c:1740f):
  /* Make sure that the expression has a typespec that works.  */
  if (expr->ts.type == BT_UNKNOWN)
    {
      if (expr->symtree->n.sym->result
            && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN)
        expr->ts = expr->symtree->n.sym->result->ts;
      else
        expr->ts = expr->symtree->n.sym->result->ts;       /* crashes here */
    }

Otherwise, I'm out of my wits here. Hope this helps someone?!


-- 


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

Reply via email to