[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, 5 Nov 2013 13:55:21 +0100 |
I have pushed these patches in maint. I will try to
release a 3.0.1 soon. I'll first check if there are
easy fixes, for other bug reports, that can be installed first.
Le 29 oct. 2013 à 16:11, Akim Demaille <address@hidden> a écrit :
> 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
>>
>>
>
>
- Re: [PATCH 5/5] bison: pacify Sun C 5.12,
Akim Demaille <=