]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/77351 (ICE in remove_trim, at frontend-passes.c:1145)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 30 Sep 2016 19:21:12 +0000 (19:21 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 30 Sep 2016 19:21:12 +0000 (19:21 +0000)
2016-09-30  Steven g. Kargl  <kargl@gcc.gnu.org>

Backport from trunk

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

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

From-SVN: r240678

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

index 1cfa9e4acc34a04658a4eeaee28f7facf3f2f932..44a7df4faaeab82b84fc4f45697710c9594205de 100644 (file)
@@ -1,3 +1,11 @@
+2016-09-30  Steven g. Kargl  <kargl@gcc.gnu.org>
+
+       Backport of trunk
+
+       PR fortran/77351
+       * frontend-passes.c (remove_trim,combine_array_constructor): Check for
+       NULL pointer.
+
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        Backport from trunk
index c521b0a78dabeb429dd9fa249b93c6944e43fc7e..38d7a100e749a71168d6dd3db8a6ddd7d75a83e2 100644 (file)
@@ -1094,6 +1094,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
@@ -1231,6 +1233,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 8f541d5c8615cfd52527120101da6595d8ea0d4a..9398bf516a553928eec18f8f7aa37c0c4a60c4f9 100644 (file)
@@ -1,3 +1,10 @@
+2016-09-30  Steven g. Kargl  <kargl@gcc.gnu.org>
+
+       Backport from trunk
+
+       PR fortran/77351
+       * gfortran.dg/pr77351.f90: New test.
+
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        Backport from trunk
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" }