Le 8 avr. 2013 à 10:28, Akim Demaille <[email protected]> a écrit :
> Hi Victor, > > You are right, this is a serious issue :( I will prepare a 2.7.1 > asap. Could you please help me making sure it works properly with > Microsoft compilers? Actually, it would be nice if you could also > help me kill some compiler warnings. Please, have a look at the > following message. > > http://lists.gnu.org/archive/html/bug-bison/2013-03/msg00003.html I will install this is {maint}. Could you please confirm that the following tarball addresses your issue? Thanks in advance! http://www.lrde.epita.fr/~akim/download/bison-2.7.7-a565f.tar.gz commit 80a2826e69b201f9a64c3f18825afe879472efb4 Author: Akim Demaille <[email protected]> Date: Mon Apr 8 10:39:48 2013 +0200 yacc.c: do not use __attribute__ unprotected Reported by Victor Khomenko. http://lists.gnu.org/archive/html/bug-bison/2013-04/msg00001.html * data/glr.c (YYUSE, __attribute__): Fuse their definition into... * data/c.m4 (b4_attribute_define): this new macro. * data/yacc.c, data/glr.c: Use it. diff --git a/NEWS b/NEWS index 8da9cf9..b499cc1 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ GNU Bison NEWS * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes + +*** Fix compiler attribute portability (yacc.c) + + With locations enabled, __attribute__ was used unprotected. * Noteworthy changes in release 2.7 (2012-12-12) [stable] diff --git a/THANKS b/THANKS index ed978d3..9b24974 100644 --- a/THANKS +++ b/THANKS @@ -121,6 +121,7 @@ Tom Tromey [email protected] Tommy Nordgren [email protected] Troy A. Johnson [email protected] Tys Lefering [email protected] +Victor Khomenko [email protected] Vin Shelton [email protected] W.C.A. Wijngaards [email protected] Wayne Green [email protected] diff --git a/data/c.m4 b/data/c.m4 index dc3d303..a1dc2c5 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -187,9 +187,29 @@ m4_define([b4_table_value_equals], [(!!(($2) == ($3)))])]) -## ---------## -## Values. ## -## ---------## +## ----------------- ## +## Compiler issues. ## +## ----------------- ## + +# b4_attribute_define +# ------------------- +# Provide portability for __attribute__. +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 */ +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif +]) # b4_null_define @@ -405,7 +425,7 @@ m4_define([b4_c_arg], ## ----------- ## # b4_sync_start(LINE, FILE) -# ----------------------- +# ------------------------- m4_define([b4_sync_start], [[#]line $1 $2]) diff --git a/data/glr.c b/data/glr.c index 02a76c2..958b040 100644 --- a/data/glr.c +++ b/data/glr.c @@ -246,13 +246,6 @@ b4_percent_code_get[]dnl # endif #endif -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# 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) @@ -291,17 +284,7 @@ b4_percent_code_get[]dnl # define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0)) #endif -/*-----------------. -| GCC extensions. | -`-----------------*/ - -#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 */ -# endif -#endif +]b4_attribute_define[ #ifndef YYASSERT # define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0))) diff --git a/data/yacc.c b/data/yacc.c index b34549f..abc949b 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -447,12 +447,7 @@ typedef short int yytype_int16; # endif #endif -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif +]b4_attribute_define[ /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint
