aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2019-08-13 18:43:00 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2019-08-13 18:43:00 +0000
commit35ca2d4ea7495018ae7c378e10baaa6eb2dbd06f (patch)
tree94133df821de7a99b31e6c2c32b9da40cfd0ff81
parenteabd9d9167ce36fe441dee0d5efbca494b303652 (diff)
downloadgcc-35ca2d4ea7495018ae7c378e10baaa6eb2dbd06f.zip
gcc-35ca2d4ea7495018ae7c378e10baaa6eb2dbd06f.tar.gz
gcc-35ca2d4ea7495018ae7c378e10baaa6eb2dbd06f.tar.bz2
re PR fortran/90563 (Out of bounds error when compiling with -Wextra)
2013-08-13 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/90563 * frontend-passes.c (insert_index): Suppress errors while simplifying the resulting expression. 2013-08-13 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/90563 * gfortran.dg/do_subsript_5.f90: New test. From-SVN: r274394
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/frontend-passes.c5
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/do_subscript_5.f9017
4 files changed, 35 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6a908eb..08908d2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,7 +1,13 @@
+2013-08-13 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/90563
+ * frontend-passes.c (insert_index): Suppress errors while
+ simplifying the resulting expression.
+
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/89647
- resolve.c (resolve_typebound_procedure): Allow host associated
+ resolve.c (resolve_typebound_procedure): Allow host associated
procedure to be a binding target. While here, wrap long line.
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 37c767f..be99a06 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -2518,7 +2518,12 @@ insert_index (gfc_expr *e, gfc_symbol *sym, mpz_t val, mpz_t ret)
data.sym = sym;
mpz_init_set (data.val, val);
gfc_expr_walker (&n, callback_insert_index, (void *) &data);
+
+ /* Suppress errors here - we could get errors here such as an
+ out of bounds access for arrays, see PR 90563. */
+ gfc_push_suppress_errors ();
gfc_simplify_expr (n, 0);
+ gfc_pop_suppress_errors ();
if (n->expr_type == EXPR_CONSTANT)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e7ec05b..4514664 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-08-13 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/90563
+ * gfortran.dg/do_subsript_5.f90: New test.
+
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/89647
@@ -22,7 +27,7 @@
* gnat.dg/casesi.ad[bs], test_casesi.adb: New test.
-2019-08-13 Wilco Dijkstra <wdijkstr@arm.com>
+2019-08-13 Wilco Dijkstra <wdijkstr@arm.com>
PR target/81800
* gcc.target/aarch64/no-inline-lrint_3.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/do_subscript_5.f90 b/gcc/testsuite/gfortran.dg/do_subscript_5.f90
new file mode 100644
index 0000000..29fefbc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_subscript_5.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! PR 90563 - this used to be rejected, wrongly
+! Original test case by Tobias Neumann
+program test
+ implicit none
+ integer, parameter :: swap(4) = [2,1,3,4]
+ real :: p(20)
+ integer :: j
+
+ p = 0.0
+
+ do j=1,6
+ if (j<5) then
+ p(j) = p(swap(j))
+ endif
+ enddo
+end program