$ cat a3.f90
  CHARACTER(LEN=2), DIMENSION(:), POINTER :: a 
  CHARACTER(LEN=4), DIMENSION(3), TARGET :: b 
  b=(/"bbbb","bbbb","bbbb"/) 
  a=>b(:)(2:3) 
  a="aa" 
  IF (ANY(b.NE.(/"baab","baab","baab"/))) CALL ABORT() 
  END 
$ gfortran a3.f90 
a3.f90:0: internal compiler error: Segmentation fault


gdb backtrace is:

Program received signal SIGSEGV, Segmentation fault.
0x00000000004179b2 in gfc_check_pointer_assign (lvalue=0xce3ae0, 
    rvalue=0xce3de0) at ../../trunk/gcc/fortran/expr.c:2330
2330      if (lvalue->ts.type == BT_CHARACTER
(gdb) where
#0  0x00000000004179b2 in gfc_check_pointer_assign (lvalue=0xce3ae0, 
    rvalue=0xce3de0) at ../../trunk/gcc/fortran/expr.c:2330
#1  0x000000000044a349 in resolve_code (code=0xce42c0, ns=0xce2380)
    at ../../trunk/gcc/fortran/resolve.c:4967
#2  0x000000000044b765 in gfc_resolve (ns=0xce2380)
    at ../../trunk/gcc/fortran/resolve.c:6919
#3  0x0000000000440a68 in gfc_parse_file ()
    at ../../trunk/gcc/fortran/parse.c:3212

2330      if (lvalue->ts.type == BT_CHARACTER
2331            && lvalue->ts.cl->length && rvalue->ts.cl->length
2332            && abs (gfc_dep_compare_expr (lvalue->ts.cl->length,
2333                                          rvalue->ts.cl->length)) == 1)

(gdb) p lvalue->ts
$1 = {type = BT_CHARACTER, kind = 1, derived = 0x0, cl = 0xcb0800}
(gdb) p rvalue->ts
$2 = {type = BT_CHARACTER, kind = 1, derived = 0x0, cl = 0x0}

So rvalue->ts.cl->length should not be referenced.


-- 
           Summary: segfault with character pointer association
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: fxcoudert at gcc dot gnu dot org


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

Reply via email to