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); }