From: Akim Demaille Date: Mon, 8 Apr 2013 08:39:48 +0000 (+0200) Subject: yacc.c: do not use __attribute__ unprotected X-Git-Tag: v2.7.1~10 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/80a2826e69b201f9a64c3f18825afe879472efb4?hp=657ed6d3be43853c457dfa2c0d91ca2de1c6f39b 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 8da9cf9f..b499cc13 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 ed978d37..9b24974f 100644 --- a/THANKS +++ b/THANKS @@ -121,6 +121,7 @@ Tom Tromey tromey@cygnus.com Tommy Nordgren tommy.nordgren@chello.se Troy A. Johnson troyj@ecn.purdue.edu Tys Lefering gccbison@gmail.com +Victor Khomenko victor.khomenko@newcastle.ac.uk Vin Shelton acs@alumni.princeton.edu W.C.A. Wijngaards wouter@NLnetLabs.nl Wayne Green wayne@infosavvy.com diff --git a/data/c.m4 b/data/c.m4 index dc3d3036..a1dc2c58 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 02a76c21..958b0403 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 b34549f1..abc949b6 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