[Top][All Lists]
[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)
{
- Re: %destructor feedback, (continued)
- Re: %destructor feedback, Paul Eggert, 2005/12/06
- Re: %destructor feedback, Joel E. Denny, 2005/12/06
- Re: %destructor feedback, Paul Eggert, 2005/12/07
- Re: %destructor feedback, Joel E. Denny, 2005/12/07
- Re: %destructor feedback, Paul Eggert, 2005/12/07
- Re: %destructor feedback, Joel E. Denny, 2005/12/07
- Re: %destructor feedback, Tzvetan Mikov, 2005/12/08
- Re: %destructor feedback, Joel E. Denny, 2005/12/08
- Re: %destructor feedback, Paul Eggert, 2005/12/08
- Re: %destructor feedback, Joel E. Denny, 2005/12/08
- 'lint' fixes for Bison-generated parsers,
Paul Eggert <=
- Re: 'lint' fixes for Bison-generated parsers, Akim Demaille, 2005/12/12
- Re: 'lint' fixes for Bison-generated parsers, Paul Eggert, 2005/12/12
- Re: %destructor feedback, Akim Demaille, 2005/12/07
- Re: %destructor feedback, Joel E. Denny, 2005/12/07
- Re: %destructor feedback, Akim Demaille, 2005/12/07
- Re: %destructor feedback, Joel E. Denny, 2005/12/07
- Re: %destructor feedback, Akim Demaille, 2005/12/19
- Re: %destructor feedback, Joel E. Denny, 2005/12/19
- Re: %destructor feedback, Frank Heckenbach, 2005/12/06
- Re: %destructor feedback, Joel E. Denny, 2005/12/06