This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Committed] PR fortran/88025 -- Null pointer no-no
- From: Steve Kargl <sgk at troutmask dot apl dot washington dot edu>
- To: fortran at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Sat, 8 Dec 2018 19:14:17 -0800
- Subject: [Committed] PR fortran/88025 -- Null pointer no-no
- Reply-to: sgk at troutmask dot apl dot washington dot edu
The attach patch guards against a NULL pointer deference
and removes asserts that cannot trigger.
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.
--
Steve
Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c (revision 266912)
+++ gcc/fortran/expr.c (working copy)
@@ -4485,12 +4485,10 @@ gfc_apply_init (gfc_typespec *ts, symbol_attribute *at
{
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: gcc/testsuite/gfortran.dg/pr88025.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr88025.f90 (nonexistent)
+++ gcc/testsuite/gfortran.dg/pr88025.f90 (working copy)
@@ -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