aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-11-18 17:40:23 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-11-18 17:40:23 +0000
commitcb40e8071e0fa1a86183f6b97ebeb3355e5e1722 (patch)
tree7cfa4a20ea36125deebad2639846e827a9bebc71
parent9515381d1cf44d4c897ac0aeee89d555d82fdd7f (diff)
downloadgcc-cb40e8071e0fa1a86183f6b97ebeb3355e5e1722.zip
gcc-cb40e8071e0fa1a86183f6b97ebeb3355e5e1722.tar.gz
gcc-cb40e8071e0fa1a86183f6b97ebeb3355e5e1722.tar.bz2
re PR fortran/88073 (Internal compiler error compiling WHERE construct with -O or -O2)
2018-11-18 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/88073 * frontend-passes.c (combine_array_constructor): Do not do anything if in a WHERE statement. 2018-11-18 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/88073 * gfortran.dg/where_7.f90: New test. From-SVN: r266251
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/frontend-passes.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/where_7.f9025
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 83920ab..15f5942 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2018-11-18 Thomas Koenig <tkoenig@gcc.gnu.org>
+ PR fortran/88073
+ * frontend-passes.c (combine_array_constructor): Do not do
+ anything if in a WHERE statement.
+
+2018-11-18 Thomas Koenig <tkoenig@gcc.gnu.org>
+
PR fortran/70260
* expr.c (gfc_check_assign): Reject assigning to an external
symbol.
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 1993030..9fa50ee 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -1773,6 +1773,10 @@ combine_array_constructor (gfc_expr *e)
if (iterator_level > 0)
return false;
+ /* WHERE also doesn't work. */
+ if (in_where > 0)
+ return false;
+
op1 = e->value.op.op1;
op2 = e->value.op.op2;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5716186..ffd271a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2018-11-18 Thomas Koenig <tkoenig@gcc.gnu.org>
+ PR fortran/88073
+ * gfortran.dg/where_7.f90: New test.
+
+2018-11-18 Thomas Koenig <tkoenig@gcc.gnu.org>
+
PR fortran/70260
* gfortran.dg/proc_ptr_result_5.f90: Add dg-error directive.
* gfortran.dg/protected_4.f90: Split line to allow for extra error.
diff --git a/gcc/testsuite/gfortran.dg/where_7.f90 b/gcc/testsuite/gfortran.dg/where_7.f90
new file mode 100644
index 0000000..1c79ef5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/where_7.f90
@@ -0,0 +1,25 @@
+! { dg-do compile }
+! { dg-options "-ffrontend-optimize" }
+! PR fortran/88073 - this used to ICE with front-end optimization
+! Original test case by 'mecej4'
+Subroutine tfu (n, x, f)
+ Implicit None
+ Integer, Parameter :: double = Kind (0.d0)
+ Integer, Intent (In) :: n
+ Real (double), Intent (Out) :: f
+ Real (double), Intent (In) :: x (n)
+ Integer :: j
+ Logical, Dimension(n) :: l1v, l2v, l3v
+!
+ l3v = .False.
+ l2v = .False.
+ l1v = (/ (j, j=1, n) /) == 1
+ Where ( .Not. (l1v))
+ l2v = (/ (j, j=1, n) /) == n
+ End Where
+ Where ( .Not. l1v)
+ l3v = .Not. l2v
+ End Where
+ f = sum (x(1:n), mask=l3v)
+ Return
+end subroutine tfu