diff --git a/data/yacc.c b/data/yacc.c index 7c298a1a..e72b098b 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -1326,16 +1326,19 @@ b4_function_define([[yyparse]], [[int]], b4_parse_param)[ ]b4_function_define([[yypstate_delete]], [[void]], [[[yypstate *yyps]], [[yyps]]])[ { + if (yyps) + { #ifndef yyoverflow - /* If the stack was reallocated but the parse did not complete, then the - stack still needs to be freed. */ - if (!yyps->yynew && yyps->yyss != yyps->yyssa) - YYSTACK_FREE (yyps->yyss); + /* If the stack was reallocated but the parse did not complete, then the + stack still needs to be freed. */ + if (!yyps->yynew && yyps->yyss != yyps->yyssa) + YYSTACK_FREE (yyps->yyss); #endif]b4_lac_if([[ - if (!yyps->yynew && yyps->yyes != yyps->yyesa) - YYSTACK_FREE (yyps->yyes);]])[ - free (yyps);]b4_pure_if([], [[ - yypstate_allocated = 0;]])[ + if (!yyps->yynew && yyps->yyes != yyps->yyesa) + YYSTACK_FREE (yyps->yyes);]])[ + free (yyps);]b4_pure_if([], [[ + yypstate_allocated = 0;]])[ + } } ]b4_pure_if([[ #define ]b4_prefix[nerrs yyps->]b4_prefix[nerrs]])[ diff --git a/doc/bison.texi b/doc/bison.texi index 2882506b..2b21b7bc 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -13114,7 +13114,7 @@ Obsoleted by @code{%printer}. The function to delete a parser instance, produced by Bison in push mode; call this function to delete the memory associated with a parser. @xref{Parser Delete Function, ,The Parser Delete Function -@code{yypstate_delete}}. +@code{yypstate_delete}}. Does nothing when called with a null pointer. (The current push parsing interface is experimental and may evolve. More user feedback will help to stabilize it.) @end deffn