------- 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