From b01b80836d02d6f10cac5a0a9f3a03889ad02fa0 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 15 Aug 2018 18:58:03 +0200 Subject: [PATCH] tests: fix warnings in push mode Fix warning with GCC 8, -DNDEBUG. 422. push.at:83: testing Multiple impure instances ... input.y: In function 'main': input.c:1022:12: error: potential null pointer dereference [-Werror=null-dereference] if (!yyps->yynew && yyps->yyss != yyps->yyssa) ~~~~^~~~~~~ * data/yacc.c (pstate_delete): Do nothing if called on null pointer. --- data/yacc.c | 19 +++++++++++-------- doc/bison.texi | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) 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