]> git.saurik.com Git - bison.git/commitdiff
Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
authorJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 10 Jan 2007 00:50:55 +0000 (00:50 +0000)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 10 Jan 2007 00:50:55 +0000 (00:50 +0000)
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.

ChangeLog
data/push.c
tests/torture.at

index 4c306fcce91a689a80ad3d874befef1f915ac0f3..af1b08bbaed8b050537013e2fc769a236272b657 100644 (file)
--- a/ChangeLog
+++ b/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>
        and Joel E. Denny  <jdenny@ces.clemson.edu>
 
index 70cad70d2550dd09724c7fd4fe605a8f22419dac..739ac2a7a689aee8494f844eb49434ab5ba0235f 100644 (file)
@@ -332,7 +332,8 @@ typedef short int yytype_int16;
 
 #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
 #  if YYSTACK_USE_ALLOCA
@@ -357,7 +358,8 @@ typedef short int yytype_int16;
 #  endif
 # endif
 
-# ifdef YYSTACK_ALLOC
+]])dnl
+[# ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning.  */
 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
 #  ifndef YYSTACK_ALLOC_MAXIMUM
@@ -1089,13 +1091,13 @@ b4_push_if(
 ]b4_locations_if([[  YYLTYPE yylloc;
 ]])])[
   if (yyps == 0)
-     yyps_local = yypstate_new ();
-   else
-     yyps_local = yyps;
-   do {
-     yychar = YYLEX;
-     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)])[);
+    yyps_local = yypstate_new ();
+  else
+    yyps_local = yyps;
+  do {
+    yychar = YYLEX;
+    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)])[);
   } while (yystatus == YYPUSH_MORE);
   if (yyps == 0)
     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)
 #endif])[
 {
-  ]b4_pure_if([b4_declare_scanner_communication_variables])
-  b4_push_if([b4_pure_if([], [[  int yypushed_char = yychar;
+]b4_pure_if([b4_declare_scanner_communication_variables])
+b4_push_if([b4_pure_if([], [[  int yypushed_char = yychar;
   YYSTYPE yypushed_val = yylval;
   ]b4_locations_if([[YYLTYPE yypushed_loc = yylloc;
 ]])])],
index fabab2dfae010e40e64a84f50579bd38f75bfaed..6e1a1a48ace6a345d0e1bba8b6fa594f8affb935 100644 (file)
@@ -490,6 +490,9 @@ AT_PARSER_CHECK([./input 900], 0, [], [ignore])
 # multiply by two starting at 200 => 5120 is the last possible).
 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],
 [[%push-pull-parser
 ]])