[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 5/5] bison: pacify Sun C 5.12
From: |
Akim Demaille |
Subject: |
Re: [PATCH 5/5] bison: pacify Sun C 5.12 |
Date: |
Tue, 29 Oct 2013 16:11:38 +0100 |
Hi Paul,
Ping!
Le 25 oct. 2013 à 12:00, Akim Demaille <address@hidden> a écrit :
>
> Le 23 oct. 2013 à 11:36, Akim Demaille <address@hidden> a écrit :
>
>>
>> Le 23 oct. 2013 à 11:08, Akim Demaille <address@hidden> a écrit :
>>
>>> What do you think about these two patches?
>>
>> Scratch that, I'll send updated patches a bit later.
>
> Hi Paul,
>
> Here is my revised proposal. I've pushed this in ad/maint.
>
> commit 40fce4507dc0fefdca79d932a87f0da0d7c32e82
> Author: Akim Demaille <address@hidden>
> Date: Wed Oct 23 10:57:09 2013 +0200
>
> skeletons: update the handling of compiler attributes
>
> * data/c.m4 (b4_attribute_define): Instead of defining __attribute__,
> define YY_ATTRIBUTE conditionally.
> (YY_ATTRIBUTE_PURE, YY_ATTRIBUTE_UNUSED, _Noreturn): New.
> Use them.
> * data/glr.c: Use them.
>
> diff --git a/data/c.m4 b/data/c.m4
> index b1b4394..9b739bc 100644
> --- a/data/c.m4
> +++ b/data/c.m4
> @@ -205,13 +205,32 @@ m4_define([b4_table_value_equals],
>
> # b4_attribute_define
> # -------------------
> -# Provide portability for __attribute__.
> +# Provide portable compiler "attributes".
> m4_define([b4_attribute_define],
> -[#ifndef __attribute__
> -/* This feature is available in gcc versions 2.5 and later. */
> -# if (! defined __GNUC__ || __GNUC__ < 2 \
> - || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
> -# define __attribute__(Spec) /* empty */
> +[#ifndef YY_ATTRIBUTE
> +# if (defined __GNUC__ \
> + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
> + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
> +# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
> +# else
> +# define YY_ATTRIBUTE(Spec) /* empty */
> +# endif
> +#endif
> +
> +#ifndef YY_ATTRIBUTE_PURE
> +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
> +#endif
> +
> +#ifndef YY_ATTRIBUTE_UNUSED
> +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
> +#endif
> +
> +#if !defined _Noreturn \
> + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
> +# if defined _MSC_VER && 1200 <= _MSC_VER
> +# define _Noreturn __declspec (noreturn)
> +# else
> +# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
> # endif
> #endif
>
> @@ -783,7 +802,7 @@ m4_define([b4_yy_location_print_define],
>
> /* Print *YYLOCP on YYO. Private, do not rely on its existence. */
>
> -__attribute__((__unused__))
> +YY_ATTRIBUTE_UNUSED
> ]b4_function_define([yy_location_print_],
> [static unsigned],
> [[FILE *yyo], [yyo]],
> diff --git a/data/glr.c b/data/glr.c
> index 8ef3553..725453b 100644
> --- a/data/glr.c
> +++ b/data/glr.c
> @@ -445,9 +445,9 @@ int yydebug;
>
> struct yyGLRStack;
> static void yypstack (struct yyGLRStack* yystackp, size_t yyk)
> - __attribute__ ((__unused__));
> + YY_ATTRIBUTE_UNUSED;
> static void yypdumpstack (struct yyGLRStack* yystackp)
> - __attribute__ ((__unused__));
> + YY_ATTRIBUTE_UNUSED;
>
> #else /* !]b4_api_PREFIX[DEBUG */
>
> @@ -669,9 +669,7 @@ struct yyGLRStack {
> static void yyexpandGLRStack (yyGLRStack* yystackp);
> #endif
>
> -static void yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
> - __attribute__ ((__noreturn__));
> -static void
> +static _Noreturn void
> yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
> {
> if (yymsg != YY_NULL)
> @@ -679,9 +677,7 @@ yyFail (yyGLRStack* yystackp]b4_pure_formals[, const
> char* yymsg)
> YYLONGJMP (yystackp->yyexception_buffer, 1);
> }
>
> -static void yyMemoryExhausted (yyGLRStack* yystackp)
> - __attribute__ ((__noreturn__));
> -static void
> +static _Noreturn void
> yyMemoryExhausted (yyGLRStack* yystackp)
> {
> YYLONGJMP (yystackp->yyexception_buffer, 2);
> @@ -702,7 +698,7 @@ yytokenName (yySymbol yytoken)
> /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
> * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
> * containing the pointer to the next state in the chain. */
> -static void yyfillin (yyGLRStackItem *, int, int) __attribute__
> ((__unused__));
> +static void yyfillin (yyGLRStackItem *, int, int) YY_ATTRIBUTE_UNUSED;
> static void
> yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
> {
> @@ -729,7 +725,7 @@ yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
> * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
> * For convenience, always return YYLOW1. */
> static inline int yyfill (yyGLRStackItem *, int *, int, yybool)
> - __attribute__ ((__unused__));
> + YY_ATTRIBUTE_UNUSED;
> static inline int
> yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
> {
> @@ -751,8 +747,7 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen,
> yyGLRStackItem* yyvsp,
> yyGLRStack* yystackp,
> YYSTYPE* yyvalp]b4_locuser_formals[)
> {
> - yybool yynormal __attribute__ ((__unused__)) =
> - (yystackp->yysplitPoint == YY_NULL);
> + yybool yynormal YY_ATTRIBUTE_UNUSED = (yystackp->yysplitPoint == YY_NULL);
> int yylow;
> ]b4_parse_param_use([yyvalp], [yylocp])dnl
> [ YYUSE (yyrhslen);
>
> commit 9292cfc09161fa6e96ff1a6e4fe53aa7d8697aa8
> Author: Akim Demaille <address@hidden>
> Date: Wed Oct 23 10:57:51 2013 +0200
>
> c++: use __attribute__((__pure__)) to avoid warnings
>
> Building C++ parsers with -Wsuggest-attribute=const and
> -Wsuggest-attribute=noreturn triggers warning in generated code.
>
> * data/lalr1.cc: Call b4_attribute_define.
> (debug_stream, debug_level): Flag as pure.
> * tests/headers.at (Several parsers): There are now more YY macros
> that "leak".
>
> diff --git a/data/lalr1.cc b/data/lalr1.cc
> index a378463..cb61ebb 100644
> --- a/data/lalr1.cc
> +++ b/data/lalr1.cc
> @@ -157,6 +157,7 @@ m4_define([b4_shared_declarations],
> ]b4_bison_locations_if([[# include "location.hh"]])])[
> ]b4_variant_if([b4_variant_includes])[
>
> +]b4_attribute_define[
> ]b4_YYDEBUG_define[
>
> ]b4_namespace_open[
> @@ -183,14 +184,14 @@ b4_location_define])])[
>
> #if ]b4_api_PREFIX[DEBUG
> /// The current debugging stream.
> - std::ostream& debug_stream () const;
> + std::ostream& debug_stream () const YY_ATTRIBUTE_PURE;
> /// Set the current debugging stream.
> void set_debug_stream (std::ostream &);
>
> /// Type for debugging levels.
> typedef int debug_level_type;
> /// The current debugging level.
> - debug_level_type debug_level () const;
> + debug_level_type debug_level () const YY_ATTRIBUTE_PURE;
> /// Set the current debugging level.
> void set_debug_level (debug_level_type l);
> #endif
> diff --git a/tests/headers.at b/tests/headers.at
> index 0ad7ef3..9b71c03 100644
> --- a/tests/headers.at
> +++ b/tests/headers.at
> @@ -223,7 +223,11 @@ AT_CHECK([[$PERL -n -0777 -e '
> s{/\*.*?\*/}{}gs;
> s{//.*}{}g;
> s{\b(YYChar
> - |YYPUSH_MORE(_DEFINED)?
> + |YYPUSH_MORE(?:_DEFINED)?
> + |YYUSE
> + |YY_ATTRIBUTE(?:_PURE|_UNUSED)?
> + |YY_IGNORE_MAYBE_UNINITIALIZED_(?:BEGIN|END)
> + |YY_INITIAL_VALUE
> |YY_\w+_INCLUDED
> |YY_NULL
> |(defined|if)\ YYDEBUG
>
>
- [PATCH 2/5] maint: mention help2man, texinfo, apt-get, (continued)
- [PATCH 2/5] maint: mention help2man, texinfo, apt-get, Paul Eggert, 2013/10/21
- [PATCH 3/5] build: examples/calc++/calc++ requires flex, Paul Eggert, 2013/10/21
- [PATCH 4/5] maint: git now ignores rpcalc, Paul Eggert, 2013/10/21
- [PATCH 5/5] bison: pacify Sun C 5.12, Paul Eggert, 2013/10/21