re PR fortran/88025 (ICE in gfc_apply_init, at fortran/expr.c:4468)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 9 Dec 2018 01:02:41 +0000 (01:02 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 9 Dec 2018 01:02:41 +0000 (01:02 +0000)
2018-12-08  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/88025
* expr.c (gfc_apply_init):  Remove asserts that cannot trigger.
Check for a NULL pointer.

2018-12-08  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/88025
* gfortran.dg/pr88025.f90: New test.

From-SVN: r266913

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

index 8603e43..4783724 100644 (file)
@@ -1,5 +1,11 @@
 2018-12-08  Steven G. Kargl  <kargl@gcc.gnu.org>
 
+       PR fortran/88025
+       * expr.c (gfc_apply_init):  Remove asserts that cannot trigger.
+       Check for a NULL pointer.
+
+2018-12-08  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        PR fortran/88357
        * class.c (insert_component_ref): Check for NULL pointer and 
        previous error message issued.
index 388fdda..6cea5b0 100644 (file)
@@ -4485,12 +4485,10 @@ gfc_apply_init (gfc_typespec *ts, symbol_attribute *attr, gfc_expr *init)
 {
   if (ts->type == BT_CHARACTER && !attr->pointer && init
       && ts->u.cl
-      && ts->u.cl->length && ts->u.cl->length->expr_type == EXPR_CONSTANT)
+      && ts->u.cl->length
+      && ts->u.cl->length->expr_type == EXPR_CONSTANT
+      && ts->u.cl->length->ts.type == BT_INTEGER)
     {
-      gcc_assert (ts->u.cl && ts->u.cl->length);
-      gcc_assert (ts->u.cl->length->expr_type == EXPR_CONSTANT);
-      gcc_assert (ts->u.cl->length->ts.type == BT_INTEGER);
-
       HOST_WIDE_INT len = gfc_mpz_get_hwi (ts->u.cl->length->value.integer);
 
       if (init->expr_type == EXPR_CONSTANT)
index f4a7885..28a3e7d 100644 (file)
@@ -1,5 +1,10 @@
 2018-12-08  Steven G. Kargl  <kargl@gcc.gnu.org>
 
+       PR fortran/88025
+       * gfortran.dg/pr88025.f90: New test.
+
+2018-12-08  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        * gfortran.dg/pr88357_1.f90: New test.
        * gfortran.dg/pr88357_2.f90: New test.
 
diff --git a/gcc/testsuite/gfortran.dg/pr88025.f90 b/gcc/testsuite/gfortran.dg/pr88025.f90
new file mode 100644 (file)
index 0000000..96172fa
--- /dev/null
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/88025
+program p
+   type t
+      character(('')) :: c = 'c'    ! { dg-error "must be of INTEGER type" }
+   end type
+end