re PR fortran/83864 (ICE in gfc_apply_init, at fortran/expr.c:4271)
authorHarald Anlauf <anlauf@gmx.de>
Thu, 18 Jan 2018 07:54:17 +0000 (07:54 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 18 Jan 2018 07:54:17 +0000 (07:54 +0000)
2018-01-17  Harald Anlauf  <anlauf@gmx.de>

PR fortran/83864
* expr.c (add_init_expr_to_sym): Do not dereference NULL pointer.

2018-01-17  Harald Anlauf  <anlauf@gmx.de>

PR fortran/83864
* gfortran.dg/pr83864.f90: New test.

From-SVN: r256837

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr83864.f90 [new file with mode: 0644]

index 3052533..3fd3bf8 100644 (file)
@@ -1,5 +1,10 @@
 2018-01-17  Harald Anlauf  <anlauf@gmx.de>
 
+       PR fortran/83864
+       * expr.c (add_init_expr_to_sym): Do not dereference NULL pointer.
+
+2018-01-17  Harald Anlauf  <anlauf@gmx.de>
+
        PR fortran/83874
        * decl.c (add_init_expr_to_sym): Do not dereference NULL pointer.
 
index 45ccc18..936b6b6 100644 (file)
@@ -4267,7 +4267,7 @@ gfc_apply_init (gfc_typespec *ts, symbol_attribute *attr, gfc_expr *init)
         gfc_set_constant_character_len (len, init, -1);
       else if (init
               && init->ts.type == BT_CHARACTER
-               && init->ts.u.cl
+               && init->ts.u.cl && init->ts.u.cl->length
                && mpz_cmp (ts->u.cl->length->value.integer,
                            init->ts.u.cl->length->value.integer))
         {
index 492c650..e166d03 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-17  Harald Anlauf  <anlauf@gmx.de>
+
+       PR fortran/83864
+       * gfortran.dg/pr83864.f90: New test.
+
 2018-01-17  Jeff Law  <law@redhat.com>
 
        PR testsuite/83883
diff --git a/gcc/testsuite/gfortran.dg/pr83864.f90 b/gcc/testsuite/gfortran.dg/pr83864.f90
new file mode 100644 (file)
index 0000000..3bf568a
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do run }
+! PR fortran/83864
+!
+! Derived from PR by Contributed by Gerhard Steinmetz <gscfq@t-online.de>
+!
+program p
+  implicit none
+  type t
+     character :: c(3) = transfer('abc','z',3)
+  end type t
+  type(t) :: x
+  if (any (x%c /= ["a", "b", "c"])) call abort ()
+end