re PR fortran/67526 (ICE on missing end parenthesis in substring construct)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 10 Sep 2015 17:13:11 +0000 (17:13 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 10 Sep 2015 17:13:11 +0000 (17:13 +0000)
2015-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/67526
* gfortran.dg/pr67526.f90: New test.

2015-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/67526
* expr.c (gfc_check_init_expr): Do not dereference a NULL pointer.

From-SVN: r227651

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

index 4e0d38ff0d1860621d37d76df4d5a5418b4d20da..13bb7b3fd639c55175e943ada4e54f3f818ba14a 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-10  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/67526
+       * expr.c (gfc_check_init_expr): Do not dereference a NULL pointer.
+
 2015-09-10  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/66993
index 1d6f310f28cad44d2d7a3f03d2f4fc33ba9dd28b..3a0ef4d8f553b8286d45cc8178bea86f1b3dcee9 100644 (file)
@@ -2600,14 +2600,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:
index 34ad00712ff6b0d5d59ea8ba9a02865b69e82e50..db2f374987d73958160a5f6fb1e755eff9a2dba8 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-10  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/67526
+       * gfortran.dg/pr67526.f90: New test.
+
 2015-09-10  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/67318
diff --git a/gcc/testsuite/gfortran.dg/pr67526.f90 b/gcc/testsuite/gfortran.dg/pr67526.f90
new file mode 100644 (file)
index 0000000..3c0834f
--- /dev/null
@@ -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