https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66528
--- Comment #5 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- (In reply to Manuel López-Ibáñez from comment #4) > diagnostic_finish tries to free the output_buffer, > but the error_buffer is statically allocated. I think this should be enough: > > --- error.c (revision 223651) > +++ error.c (working copy) > @@ -1379,12 +1379,12 @@ gfc_error_check (void) > output_buffer *tmp_buffer = pp->buffer; > pp->buffer = pp_error_buffer; > pp_really_flush (pp); > ++errorcount; > gcc_assert (gfc_output_buffer_empty_p (pp_error_buffer)); > - diagnostic_action_after_output (global_dc, DK_ERROR); > pp->buffer = tmp_buffer; > + diagnostic_action_after_output (global_dc, DK_ERROR); > return true; > } > > return false; > } > > However, a better fix may be to make the error_buffer also dynamically > allocated like the warning_buffer. Not sure why I did the change. I think either version would be OK, but I agree that making the error_buffer dynamic would be better. > (It would be nice to have a testcase testing this in the regression > testsuite.) Easy enough to generate from the test case in comment #2.