mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Suppress signed/unsigned comparison warnings for yycheck.
* data/c.m4 (b4_safest_int_type): New macro. * data/glr.c, data/lalr1.cc: Wherever you compare yycheck[i] against a signed int type, cast it to b4_safest_int_type first. * data/yacc.c: Likewise. (b4_safest_int_type): Overwrite the one from c.m4 since b4_int_type is also overwritten.
This commit is contained in:
@@ -164,6 +164,11 @@ m4_define([b4_int_type],
|
||||
|
||||
[int])])
|
||||
|
||||
# b4_safest_int_type
|
||||
# ------------------
|
||||
# The safest int type to cast to when it's necessary to compare a signed int
|
||||
# type against an int type set by b4_int_type.
|
||||
m4_define([b4_safest_int_type],[int])
|
||||
|
||||
# b4_int_type_for(NAME)
|
||||
# ---------------------
|
||||
|
||||
12
data/glr.c
12
data/glr.c
@@ -1048,7 +1048,8 @@ yygetLRActions (yyStateNum yystate, int yytoken,
|
||||
int* yyaction, const short int** yyconflicts)
|
||||
{
|
||||
int yyindex = yypact[yystate] + yytoken;
|
||||
if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
|
||||
if (yyindex < 0 || YYLAST < yyindex
|
||||
|| (]b4_safest_int_type[)yycheck[yyindex] != yytoken)
|
||||
{
|
||||
*yyaction = -yydefact[yystate];
|
||||
*yyconflicts = yyconfl;
|
||||
@@ -1070,7 +1071,8 @@ yyLRgotoState (yyStateNum yystate, yySymbol yylhs)
|
||||
{
|
||||
int yyr;
|
||||
yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
|
||||
if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
|
||||
if (0 <= yyr && yyr <= YYLAST
|
||||
&& (]b4_safest_int_type[)yycheck[yyr] == yystate)
|
||||
return yytable[yyr];
|
||||
else
|
||||
return yydefgoto[yylhs - YYNTOKENS];
|
||||
@@ -2120,7 +2122,8 @@ yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
|
||||
yyfmt = yystpcpy (yyformat, yyunexpected);
|
||||
|
||||
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
||||
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
||||
if ((]b4_safest_int_type[)yycheck[yyx + yyn] == yyx
|
||||
&& yyx != YYTERROR)
|
||||
{
|
||||
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
|
||||
{
|
||||
@@ -2216,7 +2219,8 @@ yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
|
||||
if (yyis_pact_ninf (yyj))
|
||||
return;
|
||||
yyj += yytoken;
|
||||
if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
|
||||
if (yyj < 0 || YYLAST < yyj
|
||||
|| (]b4_safest_int_type[)yycheck[yyj] != yytoken)
|
||||
{
|
||||
if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
|
||||
return;
|
||||
|
||||
@@ -608,7 +608,8 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
|
||||
/* If the proper action on seeing token YYTOKEN is to reduce or to
|
||||
detect an error, take that action. */
|
||||
yyn += yytoken;
|
||||
if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
|
||||
if (yyn < 0 || yylast_ < yyn
|
||||
|| (]b4_safest_int_type[)yycheck_[yyn] != yytoken)
|
||||
goto yydefault;
|
||||
|
||||
/* Reduce or error. */
|
||||
@@ -686,7 +687,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
|
||||
yyn = yyr1_[yyn];
|
||||
yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
|
||||
if (0 <= yystate && yystate <= yylast_
|
||||
&& yycheck_[yystate] == yystate_stack_[0])
|
||||
&& (]b4_safest_int_type[)yycheck_[yystate] == yystate_stack_[0])
|
||||
yystate = yytable_[yystate];
|
||||
else
|
||||
yystate = yydefgoto_[yyn - yyntokens_];
|
||||
@@ -759,7 +760,8 @@ b4_error_verbose_if([, yytoken])[));
|
||||
if (yyn != yypact_ninf_)
|
||||
{
|
||||
yyn += yyterror_;
|
||||
if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
|
||||
if (0 <= yyn && yyn <= yylast_
|
||||
&& (]b4_safest_int_type[)yycheck_[yyn] == yyterror_)
|
||||
{
|
||||
yyn = yytable_[yyn];
|
||||
if (0 < yyn)
|
||||
@@ -843,7 +845,7 @@ b4_error_verbose_if([, int tok])[)
|
||||
int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
|
||||
int count = 0;
|
||||
for (int x = yyxbegin; x < yyxend; ++x)
|
||||
if (yycheck_[x + yyn] == x && x != yyterror_)
|
||||
if ((]b4_safest_int_type[)yycheck_[x + yyn] == x && x != yyterror_)
|
||||
++count;
|
||||
|
||||
// FIXME: This method of building the message is not compatible
|
||||
@@ -860,7 +862,8 @@ b4_error_verbose_if([, int tok])[)
|
||||
{
|
||||
count = 0;
|
||||
for (int x = yyxbegin; x < yyxend; ++x)
|
||||
if (yycheck_[x + yyn] == x && x != yyterror_)
|
||||
if ((]b4_safest_int_type[)yycheck_[x + yyn] == x
|
||||
&& x != yyterror_)
|
||||
{
|
||||
res += (!count++) ? ", expecting " : " or ";
|
||||
res += yytnamerr_ (yytname_[x]);
|
||||
|
||||
16
data/yacc.c
16
data/yacc.c
@@ -86,6 +86,15 @@ m4_define([b4_int_type],
|
||||
[int])])
|
||||
|
||||
|
||||
# b4_safest_int_type
|
||||
# ------------------
|
||||
# The safest int type to cast to when it's necessary to compare a signed int
|
||||
# type against an int type set by b4_int_type. Overwrite the version from
|
||||
# c.m4 as a reminder to keep it consistent with overwritten b4_int_type.
|
||||
m4_define([b4_safest_int_type],[int])
|
||||
|
||||
|
||||
|
||||
## ----------------- ##
|
||||
## Semantic Values. ##
|
||||
## ----------------- ##
|
||||
@@ -900,7 +909,7 @@ yysyntax_error (char *yyresult, int yystate, int yychar)
|
||||
yyfmt = yystpcpy (yyformat, yyunexpected);
|
||||
|
||||
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
||||
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
||||
if ((]b4_safest_int_type[)yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
||||
{
|
||||
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
|
||||
{
|
||||
@@ -1205,7 +1214,7 @@ yybackup:
|
||||
/* If the proper action on seeing token YYTOKEN is to reduce or to
|
||||
detect an error, take that action. */
|
||||
yyn += yytoken;
|
||||
if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
|
||||
if (yyn < 0 || YYLAST < yyn || (]b4_safest_int_type[)yycheck[yyn] != yytoken)
|
||||
goto yydefault;
|
||||
yyn = yytable[yyn];
|
||||
if (yyn <= 0)
|
||||
@@ -1285,7 +1294,8 @@ yyreduce:
|
||||
yyn = yyr1[yyn];
|
||||
|
||||
yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
|
||||
if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
|
||||
if (0 <= yystate && yystate <= YYLAST
|
||||
&& (]b4_safest_int_type[)yycheck[yystate] == *yyssp)
|
||||
yystate = yytable[yystate];
|
||||
else
|
||||
yystate = yydefgoto[yyn - YYNTOKENS];
|
||||
|
||||
Reference in New Issue
Block a user