[PR fortran/66528] unbalanced IF/ENDIF with -fmax-errors=1 causes invalid free
Steve Kargl
sgk@troutmask.apl.washington.edu
Wed Jun 24 20:21:00 GMT 2015
On Wed, Jun 24, 2015 at 08:36:45PM +0200, Manuel López-Ibáñez wrote:
> The problem is that diagnostic_action_after_output tries to delete the
> active pretty-printer which tries to delete its output_buffer, which
> is normally dynamically allocated via placement-new, but the
> output_buffer used by the error_buffer of Fortran is statically
> allocated. Being statically allocated simplifies a lot pushing/poping
> several instances of error_buffer.
>
> The solution I found is to reset the active output_buffer back to the
> default one before calling diagnostic_action_after_output. This is a
> bit ugly, because this function does use the output_buffer, however,
> at the point that Fortran calls it, both are in an equivalent state,
> thus there is no visible difference.
>
>
> Bootstrapped and regression tested on x86_64-linux-gnu.
>
> 2015-06-24 Manuel López-Ibáñez <manu@gcc.gnu.org>
>
> PR fortran/66528
> * gfortran.dg/maxerrors.f90: New test.
>
> gcc/fortran/ChangeLog:
>
> 2015-06-24 Manuel López-Ibáñez <manu@gcc.gnu.org>
>
> PR fortran/66528
> * error.c (gfc_warning_check): Restore the default output_buffer
> before calling diagnostic_action_after_output.
> (gfc_error_check): Likewise.
> (gfc_diagnostics_init): Add comment.
Patch looks ok to me.
--
Steve
More information about the Fortran
mailing list