diff options
author | Joel E. Denny <jdenny@clemson.edu> | 2010-04-03 14:58:22 -0400 |
---|---|---|
committer | Joel E. Denny <jdenny@clemson.edu> | 2010-04-09 21:08:37 -0400 |
commit | a005dbcbe34382c2b9cb3075e83aa79ac2e651b4 (patch) | |
tree | 3661d0c2528bb8241ae85ebc70bff6d21d4cd44a /data | |
parent | 8a8b33e8d2db49a9246deb46cb583a1a33594f36 (diff) | |
download | bison-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.cc | 12 | ||||
-rw-r--r-- | data/yacc.c | 12 |
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. */ |