bison-patches
[Top][All Lists]
Advanced

[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
> 
> 




reply via email to

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