From a005dbcbe34382c2b9cb3075e83aa79ac2e651b4 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Sat, 3 Apr 2010 14:58:22 -0400 Subject: [PATCH] portability: fix pointer arithmetic to conform to C standard. Reported by Tys Lefering at . 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 --- ChangeLog | 13 +++++++++++++ data/lalr1.cc | 12 ++++++------ data/yacc.c | 12 ++++++------ src/parse-gram.c | 16 ++++++++-------- src/parse-gram.h | 2 +- 5 files changed, 34 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 23f92aef..974b7bf7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2010-04-03 Joel E. Denny + + portability: fix pointer arithmetic to conform to C standard. + Reported by Tys Lefering at + . + 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 remove useless include. 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. */ diff --git a/src/parse-gram.c b/src/parse-gram.c index 701b4c5e..4d4e1722 100644 --- a/src/parse-gram.c +++ b/src/parse-gram.c @@ -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 @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.4.1.184-510df" +#define YYBISON_VERSION "2.4.1.206-8a8b-dirty" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -1677,7 +1677,7 @@ YYLTYPE yylloc; YYLTYPE *yylsp; /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; + YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; @@ -2770,7 +2770,7 @@ yyerrlab: #endif } - yyerror_range[0] = yylloc; + yyerror_range[1] = yylloc; if (yyerrstatus == 3) { @@ -2807,7 +2807,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); @@ -2841,7 +2841,7 @@ yyerrlab1: if (yyssp == yyss) YYABORT; - yyerror_range[0] = *yylsp; + yyerror_range[1] = *yylsp; yydestruct ("Error: popping", yystos[yystate], yyvsp, yylsp); YYPOPSTACK (1); @@ -2851,10 +2851,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. */ diff --git a/src/parse-gram.h b/src/parse-gram.h index 77a6c83b..189fb7d6 100644 --- a/src/parse-gram.h +++ b/src/parse-gram.h @@ -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 -- 2.47.2