Hello world,

I have just committed r258900 as obvious on trunk to fix an
out-of-memory error in front-end optimization, which was
caused by gfortran's AST being in an inconsistent state.

I suspect that this will also fix other, as yet unknown
errors.

I will backport to the other affected branches, gcc-7 and gcc-6,
over the next few days.

Regards

        Thomas

2018-03-27  Thomas Koenig  <tkoe...@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  <tkoe...@gcc.gnu.org>

        PR fortran/85084
        * gfortran.dg/matmul_rank_1.f90: New test.
ig25@flaemmli:~/Krempel/MMICE>
! { 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
Index: frontend-passes.c
===================================================================
--- frontend-passes.c	(revision 258845)
+++ frontend-passes.c	(working copy)
@@ -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);
 }

Reply via email to