re PR fortran/77351 (ICE in remove_trim, at frontend-passes.c:1145)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 25 Aug 2016 19:35:46 +0000 (19:35 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 25 Aug 2016 19:35:46 +0000 (19:35 +0000)
2016-08-25  Steven g. Kargl  <kargl@gcc.gnu.org>

PR fortran/77351
* frontend-passes.c (remove_trim,combine_array_constructor): Check for
NULL pointer.

2016-08-25  Steven g. Kargl  <kargl@gcc.gnu.org>

PR fortran/77351
* gfortran.dg/pr77351.f90: New test.

From-SVN: r239763

gcc/fortran/ChangeLog
gcc/fortran/frontend-passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr77351.f90 [new file with mode: 0644]

index 93eb48ad52bc1fe1bafe66e140f067ba40aba21f..6def5b45ba29524e789a33279402a274db52323a 100644 (file)
@@ -1,3 +1,9 @@
+2016-08-25  Steven g. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/77351
+       * frontend-passes.c (remove_trim,combine_array_constructor): Check for
+       NULL pointer.
+
 2016-08-24  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/77358
index 3892069d057f90e5000e0bf94afe7e59d2285ff5..c138f4d7c77beb071c1523d1eb62113e20be4287 100644 (file)
@@ -1137,6 +1137,8 @@ remove_trim (gfc_expr *rhs)
   bool ret;
 
   ret = false;
+  if (!rhs)
+    return ret;
 
   /* Check for a // b // trim(c).  Looping is probably not
      necessary because the parser usually generates
@@ -1274,6 +1276,9 @@ combine_array_constructor (gfc_expr *e)
   op1 = e->value.op.op1;
   op2 = e->value.op.op2;
 
+  if (!op1 || !op2)
+    return false;
+
   if (op1->expr_type == EXPR_ARRAY && op2->rank == 0)
     scalar_first = false;
   else if (op2->expr_type == EXPR_ARRAY && op1->rank == 0)
index caeaa7e5fe1a34d2483f2940295181026d90dbff..c39e1914efc27f87546811e423b594df51e32d35 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-25  Steven g. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/77351
+       * gfortran.dg/pr77351.f90: New test.
+
 2016-08-25  Marek Polacek  <polacek@redhat.com>
 
        * c-c++-common/Wlogical-not-parentheses-2.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr77351.f90 b/gcc/testsuite/gfortran.dg/pr77351.f90
new file mode 100644 (file)
index 0000000..76ce5c5
--- /dev/null
@@ -0,0 +1,6 @@
+! { dg-do compile }
+program p
+   integer :: z(4) = [1, 2, 3, 4]
+   print *, any(shape(z) /= [4,1])  ! { dg-error "shape for elemental binary" }
+end
+! { dg-excess-errors "operands are incommensurate" }