bug-bison
[Top][All Lists]
Advanced

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

'lint' fixes for Bison-generated parsers


From: Paul Eggert
Subject: 'lint' fixes for Bison-generated parsers
Date: Fri, 09 Dec 2005 14:18:38 -0800
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

I installed the following patch, which I hope fixes the YYUSE problems
discussed in the "%destructor feedback" thread.

2005-12-09  Paul Eggert  <address@hidden>

        Cleanups so that Bison-generated parsers have less lint.
        * data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate):
        Prepend /*ARGSUSED*/, for lint's sake.
        * data/glr.c (YYUSE): Properly parenthesize, and use an alternate
        definition if 'lint' is defined.
        (YYID): New macro (or function, if lint).
        All uses of /*CONSTCOND*/0 replaced by YYID(0).
        * data/yacc.c: Likewise.
        * data/glr.c (yyuserAction, yyuserMerge, yy_reduce_print):
        (yyrecoverSyntaxError): Prepend /*ARGSUSED*/.
        * data/glr.cc (YYLLOC_DEFAULT): Omit /*CONSTCOND*/ since this code
        is C++ only.
        * data/lalr1.cc (YYUSE): Just use a cast, since this code is C++ only.
        * data/yacc.c (YYSTACK_FREE) [defined YYSTACK_ALLOC]:
        Use YYID(0) rather than 0, for lint.
        (yystrlen): Rewrite to avoid lint warning about ptrdiff_t overflow.
        (yysyntax_error): Rewrite to avoid lint warnings about parenthesization.

Index: data/c.m4
===================================================================
RCS file: /cvsroot/bison/bison/data/c.m4,v
retrieving revision 1.42
diff -p -u -r1.42 c.m4
--- data/c.m4   14 Nov 2005 15:19:16 -0000      1.42
+++ data/c.m4   9 Dec 2005 22:13:09 -0000
@@ -401,6 +401,7 @@ m4_define_default([b4_yydestruct_generat
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
+/*ARGSUSED*/
 ]$1([yydestruct],
     [static void],
     [[const char *yymsg],    [yymsg]],
@@ -438,6 +439,7 @@ m4_define_default([b4_yysymprint_generat
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
+/*ARGSUSED*/
 ]$1([yysymprint],
     [static void],
                [[FILE *yyoutput],                       [yyoutput]],
Index: data/glr.c
===================================================================
RCS file: /cvsroot/bison/bison/data/glr.c,v
retrieving revision 1.142
diff -p -u -r1.142 glr.c
--- data/glr.c  6 Dec 2005 19:38:25 -0000       1.142
+++ data/glr.c  9 Dec 2005 22:13:09 -0000
@@ -257,10 +257,20 @@ b4_syncline(address@hidden@], address@hidden@])
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
-#if __cplusplus
-# define YYUSE(e) (void) (e)
+#ifndef lint
+# define YYUSE(e) ((void) (e))
 #else
-# define YYUSE(e) do {;} while (/*CONSTCOND*/ yyfalse && (e))
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+]b4_c_function_def([YYID], [static int], [[int i], [i]])[
+{
+  return i;
+}
 #endif
 
 #ifndef YYFREE
@@ -499,7 +509,7 @@ static const ]b4_int_type_for([b4_stos])
          (Current).first_column = (Current).last_column =              \
            YYRHSLOC (Rhs, 0).last_column;                              \
        }                                                               \
-    while (/*CONSTCOND*/ 0)
+    while (YYID (0))
 
 /* YY_LOCATION_PRINT -- Print the location on the stream.
    This macro was not mandated originally: define only if we know
@@ -544,7 +554,7 @@ typedef enum { yyok, yyaccept, yyabort, 
 
 #define YYCHK(YYE)                                                          \
    do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; }      \
-   while (/*CONSTCOND*/ 0)
+   while (YYID (0))
 
 #if YYDEBUG
 
@@ -556,7 +566,7 @@ typedef enum { yyok, yyaccept, yyabort, 
 do {                                           \
   if (yydebug)                                 \
     YYFPRINTF Args;                            \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 ]b4_yysymprint_generate([b4_c_ansi_function_def])[
 
@@ -569,7 +579,7 @@ do {                                                        
                    \
                  Type, Value]b4_location_if([, Location])[]b4_user_args[); \
       YYFPRINTF (stderr, "\n");                                                
    \
     }                                                                      \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -620,13 +630,13 @@ int yydebug;
   do {                                                 \
     if (Yystack->yyspaceLeft < YYHEADROOM)             \
       yyexpandGLRStack (Yystack);                      \
-  } while (/*CONSTCOND*/ 0)
+  } while (YYID (0))
 #else
 # define YY_RESERVE_GLRSTACK(Yystack)                  \
   do {                                                 \
     if (Yystack->yyspaceLeft < YYHEADROOM)             \
       yyMemoryExhausted (Yystack);                     \
-  } while (/*CONSTCOND*/ 0)
+  } while (YYID (0))
 #endif
 
 
@@ -862,7 +872,7 @@ yyfill (yyGLRStackItem *yyvsp, int *yylo
  *  value ($$), and yylocp points to place for location information
  *  (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
  *  yyerr for YYERROR, yyabort for YYABORT. */
-static YYRESULTTAG
+/*ARGSUSED*/ static YYRESULTTAG
 yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
              YYSTYPE* yyvalp,
              YYLTYPE* YYOPTIONAL_LOC (yylocp),
@@ -919,7 +929,7 @@ b4_syncline(address@hidden@], address@hidden@])
 }
 
 
-static void
+/*ARGSUSED*/ static void
 yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
 {
   YYUSE (yy0);
@@ -1360,13 +1370,13 @@ yydoAction (yyGLRStack* yystack, size_t 
 do {                                   \
   if (yydebug)                         \
     yy_reduce_print Args;              \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 /*----------------------------------------------------------.
 | Report that the RULE is going to be reduced on stack #K.  |
 `----------------------------------------------------------*/
 
-static inline void
+/*ARGSUSED*/ static inline void
 yy_reduce_print (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule,
                 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
 {
@@ -2003,7 +2013,7 @@ yyreportSyntaxError (yyGLRStack* yystack
 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
    YYLVALP, and YYLLOCP point to the syntactic category, semantic
    value, and location of the look-ahead.  */
-static void
+/*ARGSUSED*/ static void
 yyrecoverSyntaxError (yyGLRStack* yystack,
                      YYSTYPE* yylvalp,
                      YYLTYPE* YYOPTIONAL_LOC (yyllocp)
@@ -2108,7 +2118,7 @@ yyrecoverSyntaxError (yyGLRStack* yystac
     default:                                                                \
       goto yybuglab;                                                        \
     }                                                                       \
-  } while (/*CONSTCOND*/ 0)
+  } while (YYID (0))
 
 
 /*----------.
Index: data/glr.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/glr.cc,v
retrieving revision 1.3
diff -p -u -r1.3 glr.cc
--- data/glr.cc 1 Dec 2005 20:03:53 -0000       1.3
+++ data/glr.cc 9 Dec 2005 22:13:09 -0000
@@ -243,7 +243,7 @@ b4_syncline(address@hidden@], address@hidden@])[
        {                                                               \
          (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
        }                                                               \
-    while (/*CONSTCOND*/ 0)
+    while (0)
 #endif
 
 namespace yy
Index: data/lalr1.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/lalr1.cc,v
retrieving revision 1.113
diff -p -u -r1.113 lalr1.cc
--- data/lalr1.cc       1 Dec 2005 20:03:53 -0000       1.113
+++ data/lalr1.cc       9 Dec 2005 22:13:09 -0000
@@ -321,7 +321,7 @@ b4_syncline(address@hidden@], address@hidden@])[
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
-#define YYUSE(e) do {;} while (false && (e))
+#define YYUSE(e) ((void) (e))
 
 /* A pseudo ostream that takes yydebug_ into account. */
 # define YYCDEBUG                                                      \
Index: data/yacc.c
===================================================================
RCS file: /cvsroot/bison/bison/data/yacc.c,v
retrieving revision 1.119
diff -p -u -r1.119 yacc.c
--- data/yacc.c 1 Dec 2005 20:03:55 -0000       1.119
+++ data/yacc.c 9 Dec 2005 22:13:09 -0000
@@ -261,7 +261,21 @@ b4_syncline(address@hidden@], address@hidden@])[
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
-#define YYUSE(e) do {;} while (/*CONSTCOND*/ 0 && (e))
+#ifndef lint
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+]b4_c_function_def([YYID], [static int], [[int i], [i]])[
+{
+  return i;
+}
+#endif
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -292,7 +306,7 @@ b4_syncline(address@hidden@], address@hidden@])[
 
 # ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -369,7 +383,7 @@ union yyalloc
          for (yyi = 0; yyi < (Count); yyi++)   \
            (To)[yyi] = (From)[yyi];            \
        }                                       \
-      while (/*CONSTCOND*/ 0)
+      while (YYID (0))
 #  endif
 # endif
 
@@ -387,7 +401,7 @@ union yyalloc
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        yyptr += yynewbytes / sizeof (*yyptr);                          \
       }                                                                        
\
-    while (/*CONSTCOND*/ 0)
+    while (YYID (0))
 
 #endif
 
@@ -558,7 +572,7 @@ do                                                          
\
       yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \
       YYERROR;                                                 \
     }                                                          \
-while (/*CONSTCOND*/ 0)
+while (YYID (0))
 
 
 #define YYTERROR       1
@@ -587,7 +601,7 @@ while (/*CONSTCOND*/ 0)
          (Current).first_column = (Current).last_column =              \
            YYRHSLOC (Rhs, 0).last_column;                              \
        }                                                               \
-    while (/*CONSTCOND*/ 0)
+    while (YYID (0))
 #endif
 
 
@@ -627,7 +641,7 @@ while (/*CONSTCOND*/ 0)
 do {                                           \
   if (yydebug)                                 \
     YYFPRINTF Args;                            \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
 do {                                                                     \
@@ -638,7 +652,7 @@ do {                                                        
                  \
                   Type, Value]b4_location_if([, Location])[]b4_user_args[); \
       YYFPRINTF (stderr, "\n");                                                
  \
     }                                                                    \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 ]b4_yysymprint_generate([b4_c_function_def])[
 
@@ -661,7 +675,7 @@ do {                                                        
                  \
 do {                                                           \
   if (yydebug)                                                 \
     yy_stack_print ((Bottom), (Top));                          \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 
 /*------------------------------------------------.
@@ -695,7 +709,7 @@ do {                                                        
        \
 do {                                   \
   if (yydebug)                         \
     yy_reduce_print (yyvsp, ]b4_location_if([yylsp, ])[Rule]b4_user_args[); \
-} while (/*CONSTCOND*/ 0)
+} while (YYID (0))
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -741,12 +755,10 @@ yystrlen (yystr)
      const char *yystr;
 #   endif
 {
-  const char *yys = yystr;
-
-  while (*yys++ != '\0')
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
     continue;
-
-  return yys - yystr - 1;
+  return yylen;
 }
 #  endif
 # endif
@@ -894,7 +906,7 @@ yysyntax_error (char *yyresult, int yyst
               }
             yyarg[yycount++] = yytname[yyx];
             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-            yysize_overflow |= yysize1 < yysize;
+            yysize_overflow |= (yysize1 < yysize);
             yysize = yysize1;
             yyfmt = yystpcpy (yyfmt, yyprefix);
             yyprefix = yyor;
@@ -902,7 +914,7 @@ yysyntax_error (char *yyresult, int yyst
 
       yyf = YY_(yyformat);
       yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= yysize1 < yysize;
+      yysize_overflow |= (yysize1 < yysize);
       yysize = yysize1;
 
       if (yysize_overflow)
@@ -915,7 +927,7 @@ yysyntax_error (char *yyresult, int yyst
              produced a string with the wrong number of "%s"s.  */
           char *yyp = yyresult;
           int yyi = 0;
-          while ((*yyp = *yyf))
+          while ((*yyp = *yyf) != '\0')
             {
               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
                 {




reply via email to

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