aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-03-27 18:42:02 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-03-27 18:42:02 +0000
commitef22816c3b3f580addc60df340abda46cc6ba01c (patch)
tree46e1c9ecdbcac8b4255e0a12c94e413e8d0cef31
parent13a7688fb902adb314679a2ffe64d80186632224 (diff)
downloadgcc-ef22816c3b3f580addc60df340abda46cc6ba01c.zip
gcc-ef22816c3b3f580addc60df340abda46cc6ba01c.tar.gz
gcc-ef22816c3b3f580addc60df340abda46cc6ba01c.tar.bz2
re PR fortran/85084 (ICE: out of memory allocating 18446744073709551600 bytes ...)
2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/85084 * frontend-passes.c (gfc_run_passes): Do not run front-end optimizations if a previous error occurred. 2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/85084 * gfortran.dg/matmul_rank_1.f90: New test. From-SVN: r258900
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/frontend-passes.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/matmul_rank_1.f909
4 files changed, 24 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fb0f04e..b88b27b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,4 +1,10 @@
2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/85084
+ * frontend-passes.c (gfc_run_passes): Do not run front-end
+ optimizations if a previous error occurred.
+
+2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org>
Harald Anlauf <anlauf@gmx.de>
PR fortran/85083
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 1ffd27d..6888224 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -156,6 +156,10 @@ gfc_run_passes (gfc_namespace *ns)
check_locus (ns);
#endif
+ gfc_get_errors (&w, &e);
+ if (e > 0)
+ return;
+
if (flag_frontend_optimize || flag_frontend_loop_interchange)
optimize_namespace (ns);
@@ -168,10 +172,6 @@ gfc_run_passes (gfc_namespace *ns)
expr_array.release ();
}
- gfc_get_errors (&w, &e);
- if (e > 0)
- return;
-
if (flag_realloc_lhs)
realloc_strings (ns);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 642bf15..b8d56f8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/85084
+ * gfortran.dg/matmul_rank_1.f90: New test.
+
+2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org>
Harald Anlauf <anlauf@gmx.de>
* gfortran.dg/structure_constructor_15.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/matmul_rank_1.f90 b/gcc/testsuite/gfortran.dg/matmul_rank_1.f90
new file mode 100644
index 0000000..f111b26
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/matmul_rank_1.f90
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! { dg-additional-options "-ffrontend-optimize" }
+! PR 85044 - used to die on allocating a negative amount of memory.
+! Test case by Gerhard Steinmetz.
+program p
+ real :: a(3,3) = 1.0
+ real :: b(33)
+ b = matmul(a, a) ! { dg-error "Incompatible ranks" }
+end