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




reply via email to

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