From 6b6c56f1e8015634cfa83b95d5e06a45d389e716 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Thu, 10 Sep 2015 18:07:07 +0000 Subject: [PATCH] re PR fortran/67526 (ICE on missing end parenthesis in substring construct) 2015-09-09 Steven G. Kargl PR fortran/67526 * gfortran.dg/pr67526.f90: New test. 2015-09-09 Steven G. Kargl PR fortran/67526 * expr.c (gfc_check_init_expr): Do not dereference a NULL pointer. From-SVN: r227655 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/expr.c | 18 +++++++++++------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr67526.f90 | 9 +++++++++ 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr67526.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e8453d65e1f0..b2138b067b1a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2015-09-10 Steven G. Kargl + + PR fortran/67526 + * expr.c (gfc_check_init_expr): Do not dereference a NULL pointer. + 2015-09-04 Manuel López-Ibáñez PR fortran/67429 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index cc382d342409..bf130310802b 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -2599,14 +2599,18 @@ gfc_check_init_expr (gfc_expr *e) break; case EXPR_SUBSTRING: - t = gfc_check_init_expr (e->ref->u.ss.start); - if (!t) - break; - - t = gfc_check_init_expr (e->ref->u.ss.end); - if (t) - t = gfc_simplify_expr (e, 0); + if (e->ref) + { + t = gfc_check_init_expr (e->ref->u.ss.start); + if (!t) + break; + t = gfc_check_init_expr (e->ref->u.ss.end); + if (t) + t = gfc_simplify_expr (e, 0); + } + else + t = false; break; case EXPR_STRUCTURE: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 78185fa2dddf..d8c94ebd4b35 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-09-10 Steven G. Kargl + + PR fortran/67526 + * gfortran.dg/pr67526.f90: New test. + 2015-09-10 Oleg Endo Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/pr67526.f90 b/gcc/testsuite/gfortran.dg/pr67526.f90 new file mode 100644 index 000000000000..3c0834f28dca --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr67526.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! Original code from gerhard dot steinmetz dot fortran at t-online dot de +! PR fortran/67526 +program p + character :: c1 = 'abc'(: ! { dg-error "error in SUBSTRING" } + character :: c2 = 'abc'(3: ! { dg-error "error in SUBSTRING" } + character :: c3 = 'abc'(:1 ! { dg-error "error in SUBSTRING" } + character :: c4 = 'abc'(2:2 ! { dg-error "error in SUBSTRING" } +end