bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FYI: fixed yycheck signed/unsigned comparison warnings


From: Paul Eggert
Subject: Re: FYI: fixed yycheck signed/unsigned comparison warnings
Date: Fri, 11 Aug 2006 12:53:10 -0700
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

"Joel E. Denny" <address@hidden> writes:

> I configure bison with --enable-gcc-warnings.  I tried adding a new token 
> to parse-gram.y today, but it failed to compile as gcc complained of 
> comparisons between signed and unsigned for yycheck.

In practice that warning causes a lot of makework, and I think it
harms more than it helps since the extra casts might disguise other
problems.  I installed the following patch to disable that warning
instead of having the casts.

There is one other warning worth adding, though: -Wpointer-arith.

2006-08-11  Paul Eggert  <address@hidden>

        * configure.ac (AC_ARG_ENABLE): Use -Wextra -Wno-sign-compare
        rather than -W, so we don't get bogus warnings about sign comparisons.
        Add -Wpointer-arith, since that warning is useful (it reports code
        that does not conform to C89 and that some compilers reject).
        * data/c.m4, data/glr.c, data/lalr1.cc, data/yacc.c: Undo latest change,
        since it's no longer needed.

Index: configure.ac
===================================================================
RCS file: /cvsroot/bison/bison/configure.ac,v
retrieving revision 1.70
diff -p -u -r1.70 configure.ac
--- configure.ac        25 Jul 2006 06:45:05 -0000      1.70
+++ configure.ac        11 Aug 2006 19:48:05 -0000
@@ -45,11 +45,12 @@ if test "${enableval}" = yes; then
   gl_WARNING_CFLAGS([-Werror])
   AC_SUBST([WERROR_CFLAGS], [$WARNING_CFLAGS])
   WARNING_CFLAGS=
-  gl_WARNING_CFLAGS([-W])
+  gl_WARNING_CFLAGS([-Wextra -Wno-sign-compare])
   gl_WARNING_CFLAGS([-Wall])
   gl_WARNING_CFLAGS([-Wcast-align])
   gl_WARNING_CFLAGS([-Wcast-qual])
   gl_WARNING_CFLAGS([-Wformat])
+  gl_WARNING_CFLAGS([-Wpointer-arith])
   gl_WARNING_CFLAGS([-Wwrite-strings])
   AC_SUBST([WARNING_CXXFLAGS], [$WARNING_CFLAGS])
   # The following warnings are not suitable for C++.
Index: data/c.m4
===================================================================
RCS file: /cvsroot/bison/bison/data/c.m4,v
retrieving revision 1.63
diff -p -u -r1.63 c.m4
--- data/c.m4   10 Aug 2006 01:18:50 -0000      1.63
+++ data/c.m4   11 Aug 2006 19:48:05 -0000
@@ -164,11 +164,6 @@ 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)
 # ---------------------
Index: data/glr.c
===================================================================
RCS file: /cvsroot/bison/bison/data/glr.c,v
retrieving revision 1.187
diff -p -u -r1.187 glr.c
--- data/glr.c  10 Aug 2006 01:18:50 -0000      1.187
+++ data/glr.c  11 Aug 2006 19:48:05 -0000
@@ -1048,8 +1048,7 @@ yygetLRActions (yyStateNum yystate, int 
                int* yyaction, const short int** yyconflicts)
 {
   int yyindex = yypact[yystate] + yytoken;
-  if (yyindex < 0 || YYLAST < yyindex
-      || (]b4_safest_int_type[)yycheck[yyindex] != yytoken)
+  if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
     {
       *yyaction = -yydefact[yystate];
       *yyconflicts = yyconfl;
@@ -1071,8 +1070,7 @@ yyLRgotoState (yyStateNum yystate, yySym
 {
   int yyr;
   yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
-  if (0 <= yyr && yyr <= YYLAST
-      && (]b4_safest_int_type[)yycheck[yyr] == yystate)
+  if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
     return yytable[yyr];
   else
     return yydefgoto[yylhs - YYNTOKENS];
@@ -2122,8 +2120,7 @@ yyreportSyntaxError (yyGLRStack* yystack
          yyfmt = yystpcpy (yyformat, yyunexpected);
 
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-           if ((]b4_safest_int_type[)yycheck[yyx + yyn] == yyx
-                && yyx != YYTERROR)
+           if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
              {
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
                  {
@@ -2219,8 +2216,7 @@ yyrecoverSyntaxError (yyGLRStack* yystac
        if (yyis_pact_ninf (yyj))
          return;
        yyj += yytoken;
-       if (yyj < 0 || YYLAST < yyj
-            || (]b4_safest_int_type[)yycheck[yyj] != yytoken)
+       if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
          {
            if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
              return;
Index: data/lalr1.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/lalr1.cc,v
retrieving revision 1.140
diff -p -u -r1.140 lalr1.cc
--- data/lalr1.cc       10 Aug 2006 01:18:50 -0000      1.140
+++ data/lalr1.cc       11 Aug 2006 19:48:05 -0000
@@ -608,8 +608,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_para
     /* 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
-        || (]b4_safest_int_type[)yycheck_[yyn] != yytoken)
+    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
       goto yydefault;
 
     /* Reduce or error.  */
@@ -687,7 +686,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_para
     yyn = yyr1_[yyn];
     yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
     if (0 <= yystate && yystate <= yylast_
-       && (]b4_safest_int_type[)yycheck_[yystate] == yystate_stack_[0])
+       && yycheck_[yystate] == yystate_stack_[0])
       yystate = yytable_[yystate];
     else
       yystate = yydefgoto_[yyn - yyntokens_];
@@ -760,8 +759,7 @@ b4_error_verbose_if([, yytoken])[));
        if (yyn != yypact_ninf_)
        {
          yyn += yyterror_;
-         if (0 <= yyn && yyn <= yylast_
-              && (]b4_safest_int_type[)yycheck_[yyn] == yyterror_)
+         if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
            {
              yyn = yytable_[yyn];
              if (0 < yyn)
@@ -845,7 +843,7 @@ b4_error_verbose_if([, int tok])[)
        int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
        int count = 0;
        for (int x = yyxbegin; x < yyxend; ++x)
-         if ((]b4_safest_int_type[)yycheck_[x + yyn] == x && x != yyterror_)
+         if (yycheck_[x + yyn] == x && x != yyterror_)
            ++count;
 
        // FIXME: This method of building the message is not compatible
@@ -862,8 +860,7 @@ b4_error_verbose_if([, int tok])[)
          {
            count = 0;
            for (int x = yyxbegin; x < yyxend; ++x)
-             if ((]b4_safest_int_type[)yycheck_[x + yyn] == x
-                  && x != yyterror_)
+             if (yycheck_[x + yyn] == x && x != yyterror_)
                {
                  res += (!count++) ? ", expecting " : " or ";
                  res += yytnamerr_ (yytname_[x]);
Index: data/yacc.c
===================================================================
RCS file: /cvsroot/bison/bison/data/yacc.c,v
retrieving revision 1.152
diff -p -u -r1.152 yacc.c
--- data/yacc.c 10 Aug 2006 01:18:50 -0000      1.152
+++ data/yacc.c 11 Aug 2006 19:48:05 -0000
@@ -86,15 +86,6 @@ 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.  ##
 ## ----------------- ##
@@ -909,7 +900,7 @@ yysyntax_error (char *yyresult, int yyst
       yyfmt = yystpcpy (yyformat, yyunexpected);
 
       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-       if ((]b4_safest_int_type[)yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
          {
            if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
              {
@@ -1214,7 +1205,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 || (]b4_safest_int_type[)yycheck[yyn] != yytoken)
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
     goto yydefault;
   yyn = yytable[yyn];
   if (yyn <= 0)
@@ -1294,8 +1285,7 @@ yyreduce:
   yyn = yyr1[yyn];
 
   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST
-      && (]b4_safest_int_type[)yycheck[yystate] == *yyssp)
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
     yystate = yytable[yystate];
   else
     yystate = yydefgoto[yyn - YYNTOKENS];




reply via email to

[Prev in Thread] Current Thread [Next in Thread]