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 48f4100a82)

Conflicts:

	data/yacc.c
	src/parse-gram.c
	src/parse-gram.h
This commit is contained in:
Joel E. Denny
2010-04-03 14:58:22 -04:00
parent 8a8b33e8d2
commit a005dbcbe3
5 changed files with 34 additions and 21 deletions

View File

@@ -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> 2010-04-05 Akim Demaille <demaille@gostai.com>
remove useless include. remove useless include.

View File

@@ -553,7 +553,7 @@ do { \
/// Location of the lookahead. /// Location of the lookahead.
location_type yylloc; location_type yylloc;
/// The locations where the error started and ended. /// The locations where the error started and ended.
location_type yyerror_range[2]; location_type yyerror_range[3];
/// $$. /// $$.
semantic_type yyval; semantic_type yyval;
@@ -723,7 +723,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
error (yylloc, yysyntax_error_ (yystate, yytoken)); error (yylloc, yysyntax_error_ (yystate, yytoken));
} }
yyerror_range[0] = yylloc; yyerror_range[1] = yylloc;
if (yyerrstatus_ == 3) if (yyerrstatus_ == 3)
{ {
/* If just tried and failed to reuse lookahead token after an /* 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) if (false)
goto yyerrorlab; 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 /* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */ this YYERROR. */
yypop_ (yylen); yypop_ (yylen);
@@ -790,7 +790,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
if (yystate_stack_.height () == 1) if (yystate_stack_.height () == 1)
YYABORT; YYABORT;
yyerror_range[0] = yylocation_stack_[0]; yyerror_range[1] = yylocation_stack_[0];
yydestruct_ ("Error: popping", yydestruct_ ("Error: popping",
yystos_[yystate], yystos_[yystate],
&yysemantic_stack_[0], &yylocation_stack_[0]); &yysemantic_stack_[0], &yylocation_stack_[0]);
@@ -799,10 +799,10 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
YY_STACK_PRINT (); YY_STACK_PRINT ();
} }
yyerror_range[1] = yylloc; yyerror_range[2] = yylloc;
// Using YYLLOC is tempting, but would change the location of // Using YYLLOC is tempting, but would change the location of
// the lookahead. YYLOC is available though. // the lookahead. YYLOC is available though.
YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
yysemantic_stack_.push (yylval); yysemantic_stack_.push (yylval);
yylocation_stack_.push (yyloc); yylocation_stack_.push (yyloc);

View File

@@ -203,7 +203,7 @@ m4_define([b4_declare_parser_state_variables], [b4_pure_if([[
YYLTYPE *yylsp; YYLTYPE *yylsp;
/* The locations where the error started and ended. */ /* The locations where the error started and ended. */
YYLTYPE yyerror_range[2];]])[ YYLTYPE yyerror_range[3];]])[
YYSIZE_T yystacksize;]]) YYSIZE_T yystacksize;]])
@@ -1568,7 +1568,7 @@ yyerrlab:
#endif #endif
} }
]b4_locations_if([[ yyerror_range[0] = yylloc;]])[ ]b4_locations_if([[ yyerror_range[1] = yylloc;]])[
if (yyerrstatus == 3) if (yyerrstatus == 3)
{ {
@@ -1605,7 +1605,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0) if (/*CONSTCOND*/ 0)
goto yyerrorlab; 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 ]])[ /* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */ this YYERROR. */
YYPOPSTACK (yylen); YYPOPSTACK (yylen);
@@ -1639,7 +1639,7 @@ yyerrlab1:
if (yyssp == yyss) if (yyssp == yyss)
YYABORT; YYABORT;
]b4_locations_if([[ yyerror_range[0] = *yylsp;]])[ ]b4_locations_if([[ yyerror_range[1] = *yylsp;]])[
yydestruct ("Error: popping", yydestruct ("Error: popping",
yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[); yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
YYPOPSTACK (1); YYPOPSTACK (1);
@@ -1649,10 +1649,10 @@ yyerrlab1:
*++yyvsp = yylval; *++yyvsp = yylval;
]b4_locations_if([[ ]b4_locations_if([[
yyerror_range[1] = yylloc; yyerror_range[2] = yylloc;
/* Using YYLLOC is tempting, but would change the location of /* Using YYLLOC is tempting, but would change the location of
the lookahead. YYLOC is available though. */ the lookahead. YYLOC is available though. */
YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
*++yylsp = yyloc;]])[ *++yylsp = yyloc;]])[
/* Shift the error token. */ /* Shift the error token. */

View File

@@ -1,4 +1,4 @@
/* A Bison parser, made by GNU Bison 2.4.1.184-510df. */ /* A Bison parser, made by GNU Bison 2.4.1.206-8a8b-dirty. */
/* Skeleton implementation for Bison's Yacc-like parsers in C /* Skeleton implementation for Bison's Yacc-like parsers in C
@@ -44,7 +44,7 @@
#define YYBISON 1 #define YYBISON 1
/* Bison version. */ /* Bison version. */
#define YYBISON_VERSION "2.4.1.184-510df" #define YYBISON_VERSION "2.4.1.206-8a8b-dirty"
/* Skeleton name. */ /* Skeleton name. */
#define YYSKELETON_NAME "yacc.c" #define YYSKELETON_NAME "yacc.c"
@@ -1677,7 +1677,7 @@ YYLTYPE yylloc;
YYLTYPE *yylsp; YYLTYPE *yylsp;
/* The locations where the error started and ended. */ /* The locations where the error started and ended. */
YYLTYPE yyerror_range[2]; YYLTYPE yyerror_range[3];
YYSIZE_T yystacksize; YYSIZE_T yystacksize;
@@ -2770,7 +2770,7 @@ yyerrlab:
#endif #endif
} }
yyerror_range[0] = yylloc; yyerror_range[1] = yylloc;
if (yyerrstatus == 3) if (yyerrstatus == 3)
{ {
@@ -2807,7 +2807,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0) if (/*CONSTCOND*/ 0)
goto yyerrorlab; 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 /* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */ this YYERROR. */
YYPOPSTACK (yylen); YYPOPSTACK (yylen);
@@ -2841,7 +2841,7 @@ yyerrlab1:
if (yyssp == yyss) if (yyssp == yyss)
YYABORT; YYABORT;
yyerror_range[0] = *yylsp; yyerror_range[1] = *yylsp;
yydestruct ("Error: popping", yydestruct ("Error: popping",
yystos[yystate], yyvsp, yylsp); yystos[yystate], yyvsp, yylsp);
YYPOPSTACK (1); YYPOPSTACK (1);
@@ -2851,10 +2851,10 @@ yyerrlab1:
*++yyvsp = yylval; *++yyvsp = yylval;
yyerror_range[1] = yylloc; yyerror_range[2] = yylloc;
/* Using YYLLOC is tempting, but would change the location of /* Using YYLLOC is tempting, but would change the location of
the lookahead. YYLOC is available though. */ the lookahead. YYLOC is available though. */
YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
*++yylsp = yyloc; *++yylsp = yyloc;
/* Shift the error token. */ /* Shift the error token. */

View File

@@ -1,4 +1,4 @@
/* A Bison parser, made by GNU Bison 2.4.1.184-510df. */ /* A Bison parser, made by GNU Bison 2.4.1.206-8a8b-dirty. */
/* Skeleton interface for Bison's Yacc-like parsers in C /* Skeleton interface for Bison's Yacc-like parsers in C