summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorJoel E. Denny <jdenny@clemson.edu>2010-04-03 14:58:22 -0400
committerJoel E. Denny <jdenny@clemson.edu>2010-04-09 21:08:37 -0400
commita005dbcbe34382c2b9cb3075e83aa79ac2e651b4 (patch)
tree3661d0c2528bb8241ae85ebc70bff6d21d4cd44a /data
parent8a8b33e8d2db49a9246deb46cb583a1a33594f36 (diff)
downloadbison-a005dbcbe34382c2b9cb3075e83aa79ac2e651b4.tar.gz
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. (cherry picked from commit 48f4100a8299918a3abc9c5d29db85319cad3cee) Conflicts: data/yacc.c src/parse-gram.c src/parse-gram.h
Diffstat (limited to 'data')
-rw-r--r--data/lalr1.cc12
-rw-r--r--data/yacc.c12
2 files changed, 12 insertions, 12 deletions
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 86cc7135..d56c8b82 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -553,7 +553,7 @@ do { \
/// Location of the lookahead.
location_type yylloc;
/// The locations where the error started and ended.
- location_type yyerror_range[2];
+ location_type yyerror_range[3];
/// $$.
semantic_type yyval;
@@ -723,7 +723,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
error (yylloc, yysyntax_error_ (yystate, yytoken));
}
- yyerror_range[0] = yylloc;
+ yyerror_range[1] = yylloc;
if (yyerrstatus_ == 3)
{
/* If just tried and failed to reuse lookahead token after an
@@ -758,7 +758,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
if (false)
goto yyerrorlab;
- yyerror_range[0] = yylocation_stack_[yylen - 1];
+ yyerror_range[1] = yylocation_stack_[yylen - 1];
/* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */
yypop_ (yylen);
@@ -790,7 +790,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
if (yystate_stack_.height () == 1)
YYABORT;
- yyerror_range[0] = yylocation_stack_[0];
+ yyerror_range[1] = yylocation_stack_[0];
yydestruct_ ("Error: popping",
yystos_[yystate],
&yysemantic_stack_[0], &yylocation_stack_[0]);
@@ -799,10 +799,10 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
YY_STACK_PRINT ();
}
- 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);
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yyloc);
diff --git a/data/yacc.c b/data/yacc.c
index 4274673d..539b6544 100644
--- a/data/yacc.c
+++ b/data/yacc.c
@@ -203,7 +203,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;]])
@@ -1568,7 +1568,7 @@ yyerrlab:
#endif
}
-]b4_locations_if([[ yyerror_range[0] = yylloc;]])[
+]b4_locations_if([[ yyerror_range[1] = yylloc;]])[
if (yyerrstatus == 3)
{
@@ -1605,7 +1605,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);
@@ -1639,7 +1639,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);
@@ -1649,10 +1649,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. */