aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2016-02-16 21:10:00 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2016-02-16 21:10:00 +0000
commit49a1164ae39421767ad9c4e755509bc82f30be09 (patch)
tree74aced5dcf7b28daef7017a86ac1af2e3f9ed7aa
parentbf14eba23b25519f20b198110389e1401be8624f (diff)
downloadgcc-49a1164ae39421767ad9c4e755509bc82f30be09.zip
gcc-49a1164ae39421767ad9c4e755509bc82f30be09.tar.gz
gcc-49a1164ae39421767ad9c4e755509bc82f30be09.tar.bz2
re PR fortran/69742 (ICE with -O3 and ASSOCIATE containing repeated expression)
2015-02-16 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/69742 * frontend-passes.c (cfe-expr_0): Don't register functions from within an ASSOCIATE statement. 2015-02-16 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/69742 * gfortran.dg/associate_21.f90: New test. From-SVN: r233474
-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/associate_21.f9019
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 453e72a..5cf25a4 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-16 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/69742
+ * frontend-passes.c (cfe-expr_0): Don't register functions
+ from within an ASSOCIATE statement.
+
2016-02-14 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/60526
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 76edbae..156ea2b 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -734,9 +734,9 @@ cfe_expr_0 (gfc_expr **e, int *walk_subtrees,
gfc_expr *newvar;
gfc_expr **ei, **ej;
- /* Don't do this optimization within OMP workshare. */
+ /* Don't do this optimization within OMP workshare or ASSOC lists. */
- if (in_omp_workshare)
+ if (in_omp_workshare || in_assoc_list)
{
*walk_subtrees = 0;
return 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index df0b67c..a071823 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-02-16 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/69742
+ * gfortran.dg/associate_21.f90: New test.
+
2016-02-16 Jakub Jelinek <jakub@redhat.com>
PR c/69835
diff --git a/gcc/testsuite/gfortran.dg/associate_21.f90 b/gcc/testsuite/gfortran.dg/associate_21.f90
new file mode 100644
index 0000000..a7bbaba
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/associate_21.f90
@@ -0,0 +1,19 @@
+! { dg-do compile }
+! { dg-options "-ffrontend-optimize" }
+! PR 69742 - this used to ICE with front-end optimizatoin
+! Original test case by Marco Restelli.
+program p
+ implicit none
+ integer, allocatable :: i(:), j
+
+ allocate( i(5) )
+ i = (/( j , j=1,5 )/)
+
+ ! The ICE appears when "size(i)" is used twice in associate
+ associate( i5 => i(size(i):size(i)) ) ! this gives ICE
+ !associate( i5 => i(size(2*i):size(i)) ) ! this works
+ i5 = 2
+ end associate
+
+ write(*,*) i
+end program p