]> git.saurik.com Git - bison.git/commitdiff
portability: fix pointer arithmetic to conform to C standard.
authorJoel E. Denny <jdenny@clemson.edu>
Sat, 3 Apr 2010 18:58:22 +0000 (14:58 -0400)
committerJoel E. Denny <jdenny@clemson.edu>
Sat, 10 Apr 2010 02:44:08 +0000 (22:44 -0400)
Reported by Tys Lefering at
<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00035.html>.
This fix is already implemented in glr.c and does not apply to
lalr1.java.
* data/lalr1.cc (yy::parser::parse): Increase size of
yyerror_range and adjust subscripting so you don't have to
subtract one from the beginning of the array.
* data/yacc.c (b4_declare_parser_state_variables,
yyparse, yypush_parse): Likewise.
(cherry picked from commit 48f4100a8299918a3abc9c5d29db85319cad3cee)

Conflicts:

data/lalr1.cc
data/yacc.c
src/parse-gram.c
src/parse-gram.h

ChangeLog
data/lalr1.cc
data/yacc.c
src/parse-gram.c
src/parse-gram.h

index 27589eda9554153bf18581254bb08aad185ef1b9..f093f2d13ac60734a20c204f3ce67649e8328d9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2010-04-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       portability: fix pointer arithmetic to conform to C standard.
+       Reported by Tys Lefering at
+       <http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00035.html>.
+       This fix is already implemented in glr.c and does not apply to
+       lalr1.java.
+       * data/lalr1.cc (yy::parser::parse): Increase size of
+       yyerror_range and adjust subscripting so you don't have to
+       subtract one from the beginning of the array.
+       * data/yacc.c (b4_declare_parser_state_variables,
+       yyparse, yypush_parse): Likewise.
+
 2010-04-05  Akim Demaille  <demaille@gostai.com>
 
        remove useless include.
index b89a6df856214f634054942ff55ce3f95cc2442e..e4cbf6f7c62f42d378b9f9b3419ed470969b7d61 100644 (file)
@@ -689,7 +689,7 @@ b4_percent_code_get[]dnl
     symbol_type yyla;]b4_locations_if([[
 
     /// The locations where the error started and ended.
-    stack_symbol_type yyerror_range[2];]])[
+    stack_symbol_type yyerror_range[3];]])[
 
     /// $$ and @@$.
     stack_symbol_type yylhs;
@@ -866,7 +866,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
       }
 
 ]b4_locations_if([[
-    yyerror_range[0].location = yyla.location;]])[
+    yyerror_range[1].location = yyla.location;]])[
     if (yyerrstatus_ == 3)
       {
        /* If just tried and failed to reuse lookahead token after an
@@ -897,7 +897,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
        code.  */
     if (false)
       goto yyerrorlab;]b4_locations_if([[
-    yyerror_range[0].location = yystack_[yylen - 1].location;]])b4_variant_if([[
+    yyerror_range[1].location = yystack_[yylen - 1].location;]])b4_variant_if([[
     /* $$ was initialized before running the user action.  */
     yy_destroy_ ("Error: discarding", yylhs);]])[
     /* Do not reclaim the symbols of the rule which action triggered
@@ -931,14 +931,14 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
           if (yystack_.size () == 1)
             YYABORT;
 ]b4_locations_if([[
-          yyerror_range[0].location = yystack_[0].location;]])[
+          yyerror_range[1].location = yystack_[0].location;]])[
           yy_destroy_ ("Error: popping", yystack_[0]);
           yypop_ ();
           YY_STACK_PRINT ();
         }
 ]b4_locations_if([[
-      yyerror_range[1].location = yyla.location;
-      YYLLOC_DEFAULT (error_token.location, (yyerror_range - 1), 2);]])[
+      yyerror_range[2].location = yyla.location;
+      YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
 
       /* Shift the error token.  */
       error_token.state = yyn;
index 5780a29594b7ed0f04ca801aa8ce8bb770797bef..5efef5f85e7b5b041c4cbcadfe7387e1ade758ab 100644 (file)
@@ -205,7 +205,7 @@ m4_define([b4_declare_parser_state_variables], [b4_pure_if([[
     YYLTYPE *yylsp;
 
     /* The locations where the error started and ended.  */
-    YYLTYPE yyerror_range[2];]])[
+    YYLTYPE yyerror_range[3];]])[
 
     YYSIZE_T yystacksize;]])
 
@@ -1502,7 +1502,7 @@ yyerrlab:
 #endif
     }
 
-]b4_locations_if([[  yyerror_range[0] = yylloc;]])[
+]b4_locations_if([[  yyerror_range[1] = yylloc;]])[
 
   if (yyerrstatus == 3)
     {
@@ -1539,7 +1539,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-]b4_locations_if([[  yyerror_range[0] = yylsp[1-yylen];
+]b4_locations_if([[  yyerror_range[1] = yylsp[1-yylen];
 ]])[  /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -1573,7 +1573,7 @@ yyerrlab1:
       if (yyssp == yyss)
        YYABORT;
 
-]b4_locations_if([[      yyerror_range[0] = *yylsp;]])[
+]b4_locations_if([[      yyerror_range[1] = *yylsp;]])[
       yydestruct ("Error: popping",
                  yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
       YYPOPSTACK (1);
@@ -1583,10 +1583,10 @@ yyerrlab1:
 
   *++yyvsp = yylval;
 ]b4_locations_if([[
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
      the lookahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;]])[
 
   /* Shift the error token.  */
index cb757d7f4aee8c10c837e19facc6baa0116d39bc..4fef5a2fda283e6ff47ceaa3de6047bc7c5a34e2 100644 (file)
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.4.462-882b.  */
+/* A Bison parser, made by GNU Bison 2.4.483-4ad39-dirty.  */
 
 /* Implementation for Bison's Yacc-like parsers in C
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.462-882b"
+#define YYBISON_VERSION "2.4.483-4ad39-dirty"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -1688,7 +1688,7 @@ YYLTYPE yylloc;
     YYLTYPE *yylsp;
 
     /* The locations where the error started and ended.  */
-    YYLTYPE yyerror_range[2];
+    YYLTYPE yyerror_range[3];
 
     YYSIZE_T yystacksize;
 
@@ -2865,7 +2865,7 @@ yyerrlab:
 #endif
     }
 
-  yyerror_range[0] = yylloc;
+  yyerror_range[1] = yylloc;
 
   if (yyerrstatus == 3)
     {
@@ -2902,7 +2902,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  yyerror_range[0] = yylsp[1-yylen];
+  yyerror_range[1] = yylsp[1-yylen];
   /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -2936,7 +2936,7 @@ yyerrlab1:
       if (yyssp == yyss)
        YYABORT;
 
-      yyerror_range[0] = *yylsp;
+      yyerror_range[1] = *yylsp;
       yydestruct ("Error: popping",
                  yystos[yystate], yyvsp, yylsp);
       YYPOPSTACK (1);
@@ -2946,10 +2946,10 @@ yyerrlab1:
 
   *++yyvsp = yylval;
 
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
      the lookahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;
 
   /* Shift the error token.  */
index e334290e556bca2ef34e0f800e0a18a1fc86746c..3363499a5a33f3b9f9f81990b21b7e1dbfa22cc9 100644 (file)
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.4.462-882b.  */
+/* A Bison parser, made by GNU Bison 2.4.483-4ad39-dirty.  */
 
 /* Interface for Bison's Yacc-like parsers in C