mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-26 20:53:04 +00:00
Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
locals. Reported by Juan Manuel Guerrero at <http://lists.gnu.org/archive/html/bug-bison/2007-01/msg00000.html>. * data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if. Fix some indentation also. * tests/torture.at (Exploding the Stack Size with Alloca): Add comment explaining this issue.
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
|||||||
|
2007-01-09 Joel E. Denny <jdenny@ces.clemson.edu>
|
||||||
|
|
||||||
|
Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
|
||||||
|
locals. Reported by Juan Manuel Guerrero at
|
||||||
|
<http://lists.gnu.org/archive/html/bug-bison/2007-01/msg00000.html>.
|
||||||
|
* data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if.
|
||||||
|
Fix some indentation also.
|
||||||
|
* tests/torture.at (Exploding the Stack Size with Alloca): Add comment
|
||||||
|
explaining this issue.
|
||||||
|
|
||||||
2007-01-09 Paolo Bonzini <bonzini@gnu.org>
|
2007-01-09 Paolo Bonzini <bonzini@gnu.org>
|
||||||
and Joel E. Denny <jdenny@ces.clemson.edu>
|
and Joel E. Denny <jdenny@ces.clemson.edu>
|
||||||
|
|
||||||
|
|||||||
24
data/push.c
24
data/push.c
@@ -332,7 +332,8 @@ typedef short int yytype_int16;
|
|||||||
|
|
||||||
#if ! defined yyoverflow || YYERROR_VERBOSE
|
#if ! defined yyoverflow || YYERROR_VERBOSE
|
||||||
|
|
||||||
/* The parser invokes alloca or malloc; define the necessary symbols. */
|
]b4_push_if([],
|
||||||
|
[[/* The parser invokes alloca or malloc; define the necessary symbols. */
|
||||||
|
|
||||||
# ifdef YYSTACK_USE_ALLOCA
|
# ifdef YYSTACK_USE_ALLOCA
|
||||||
# if YYSTACK_USE_ALLOCA
|
# if YYSTACK_USE_ALLOCA
|
||||||
@@ -357,7 +358,8 @@ typedef short int yytype_int16;
|
|||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef YYSTACK_ALLOC
|
]])dnl
|
||||||
|
[# ifdef YYSTACK_ALLOC
|
||||||
/* Pacify GCC's `empty if-body' warning. */
|
/* Pacify GCC's `empty if-body' warning. */
|
||||||
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
|
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
|
||||||
# ifndef YYSTACK_ALLOC_MAXIMUM
|
# ifndef YYSTACK_ALLOC_MAXIMUM
|
||||||
@@ -1089,13 +1091,13 @@ b4_push_if(
|
|||||||
]b4_locations_if([[ YYLTYPE yylloc;
|
]b4_locations_if([[ YYLTYPE yylloc;
|
||||||
]])])[
|
]])])[
|
||||||
if (yyps == 0)
|
if (yyps == 0)
|
||||||
yyps_local = yypstate_new ();
|
yyps_local = yypstate_new ();
|
||||||
else
|
else
|
||||||
yyps_local = yyps;
|
yyps_local = yyps;
|
||||||
do {
|
do {
|
||||||
yychar = YYLEX;
|
yychar = YYLEX;
|
||||||
yystatus =
|
yystatus =
|
||||||
yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])[);
|
yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])[);
|
||||||
} while (yystatus == YYPUSH_MORE);
|
} while (yystatus == YYPUSH_MORE);
|
||||||
if (yyps == 0)
|
if (yyps == 0)
|
||||||
yypstate_delete (yyps_local);
|
yypstate_delete (yyps_local);
|
||||||
@@ -1149,8 +1151,8 @@ b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])
|
|||||||
b4_c_function_def([yyparse], [int], b4_parse_param)
|
b4_c_function_def([yyparse], [int], b4_parse_param)
|
||||||
#endif])[
|
#endif])[
|
||||||
{
|
{
|
||||||
]b4_pure_if([b4_declare_scanner_communication_variables])
|
]b4_pure_if([b4_declare_scanner_communication_variables])
|
||||||
b4_push_if([b4_pure_if([], [[ int yypushed_char = yychar;
|
b4_push_if([b4_pure_if([], [[ int yypushed_char = yychar;
|
||||||
YYSTYPE yypushed_val = yylval;
|
YYSTYPE yypushed_val = yylval;
|
||||||
]b4_locations_if([[YYLTYPE yypushed_loc = yylloc;
|
]b4_locations_if([[YYLTYPE yypushed_loc = yylloc;
|
||||||
]])])],
|
]])])],
|
||||||
|
|||||||
@@ -490,6 +490,9 @@ AT_PARSER_CHECK([./input 900], 0, [], [ignore])
|
|||||||
# multiply by two starting at 200 => 5120 is the last possible).
|
# multiply by two starting at 200 => 5120 is the last possible).
|
||||||
AT_PARSER_CHECK([./input 10000], 2, [], [ignore])
|
AT_PARSER_CHECK([./input 10000], 2, [], [ignore])
|
||||||
|
|
||||||
|
# The push parser can't use alloca since the stacks can't be locals. This test
|
||||||
|
# just helps guarantee we don't let the YYSTACK_USE_ALLOCA feature affect
|
||||||
|
# push parsers.
|
||||||
AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
|
AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
|
||||||
[[%push-pull-parser
|
[[%push-pull-parser
|
||||||
]])
|
]])
|
||||||
|
|||||||
Reference in New Issue
Block a user