New macro GNUC_PREREQ for GCC version
* src/conf_post.h (GNUC_PREREQ): New macro. Change uses of __GNUC_MINOR__ and __GNUC_PATCHLEVEL__ to use this macro instead, for clarity and consistency. (PRINTF_ARCHETYPE): New macro. Define it to __gnu_printf__ only if glibc, since non-GNU platforms don’t necessarily support GNU printf formats. (ATTRIBUTE_FORMAT_PRINTF): Use it.
This commit is contained in:
parent
37f8a470d0
commit
ab182c6248
7 changed files with 37 additions and 33 deletions
|
@ -637,7 +637,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
|
|||
the table clearer. */
|
||||
#define LABEL(OP) [OP] = &&insn_ ## OP
|
||||
|
||||
#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
|
||||
#if GNUC_PREREQ (4, 6, 0)
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Woverride-init"
|
||||
#elif defined __clang__
|
||||
|
@ -656,7 +656,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
|
|||
#undef DEFINE
|
||||
};
|
||||
|
||||
#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) || defined __clang__
|
||||
#if GNUC_PREREQ (4, 6, 0) || defined __clang__
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
|
|
|
@ -34,6 +34,17 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#include <stdbool.h>
|
||||
|
||||
/* GNUC_PREREQ (V, W, X) is true if this is GNU C version V.W.X or later.
|
||||
It can be used in a preprocessor expression. */
|
||||
#ifndef __GNUC_MINOR__
|
||||
# define GNUC_PREREQ(v, w, x) false
|
||||
#elif ! defined __GNUC_PATCHLEVEL__
|
||||
# define GNUC_PREREQ(v, w, x) ((v) < __GNUC__ + ((w) <= __GNUC_MINOR__))
|
||||
#else
|
||||
# define GNUC_PREREQ(v, w, x) \
|
||||
((v) < __GNUC__ + ((w) <= __GNUC_MINOR__ + ((x) <= __GNUC_PATCHLEVEL__)))
|
||||
#endif
|
||||
|
||||
/* The type of bool bitfields. Needed to compile Objective-C with
|
||||
standard GCC. It was also needed to port to pre-C99 compilers,
|
||||
although we don't care about that any more. */
|
||||
|
@ -55,13 +66,11 @@ typedef bool bool_bf;
|
|||
on arguments like alloc_size that are handled in this simulation. */
|
||||
#ifndef __has_attribute
|
||||
# define __has_attribute(a) __has_attribute_##a
|
||||
# define __has_attribute_alloc_size (4 < __GNUC__ + (3 <= __GNUC_MINOR__))
|
||||
# define __has_attribute_cleanup (3 < __GNUC__ + (4 <= __GNUC_MINOR__))
|
||||
# define __has_attribute_externally_visible \
|
||||
(4 < __GNUC__ + (1 <= __GNUC_MINOR__))
|
||||
# define __has_attribute_alloc_size GNUC_PREREQ (4, 3, 0)
|
||||
# define __has_attribute_cleanup GNUC_PREREQ (3, 4, 0)
|
||||
# define __has_attribute_externally_visible GNUC_PREREQ (4, 1, 0)
|
||||
# define __has_attribute_no_address_safety_analysis false
|
||||
# define __has_attribute_no_sanitize_address \
|
||||
(4 < __GNUC__ + (8 <= __GNUC_MINOR__))
|
||||
# define __has_attribute_no_sanitize_address GNUC_PREREQ (4, 8, 0)
|
||||
#endif
|
||||
|
||||
/* Simulate __has_builtin on compilers that lack it. It is used only
|
||||
|
@ -69,8 +78,7 @@ typedef bool bool_bf;
|
|||
simulation. */
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(a) __has_builtin_##a
|
||||
# define __has_builtin___builtin_assume_aligned \
|
||||
(4 < __GNUC__ + (7 <= __GNUC_MINOR__))
|
||||
# define __has_builtin___builtin_assume_aligned GNUC_PREREQ (4, 7, 0)
|
||||
#endif
|
||||
|
||||
/* Simulate __has_feature on compilers that lack it. It is used only
|
||||
|
@ -245,24 +253,21 @@ extern int emacs_setenv_TZ (char const *);
|
|||
#define EXTERNALLY_VISIBLE
|
||||
#endif
|
||||
|
||||
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
|
||||
#if GNUC_PREREQ (2, 7, 0)
|
||||
# define ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
|
||||
#else
|
||||
# define ATTRIBUTE_FORMAT(spec) /* empty */
|
||||
#endif
|
||||
|
||||
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
|
||||
# ifdef __MINGW32__
|
||||
# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
|
||||
ATTRIBUTE_FORMAT ((__ms_printf__, formatstring_parameter, first_argument))
|
||||
#else /* !__MINGW32__ */
|
||||
# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
|
||||
ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument))
|
||||
#endif /* !__MINGW32__ */
|
||||
#else /* __GNUC__ < 4.4 */
|
||||
# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
|
||||
ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
|
||||
#endif /* __GNUC__ < 4.4 */
|
||||
#if GNUC_PREREQ (4, 4, 0) && defined __GLIBC_MINOR__
|
||||
# define PRINTF_ARCHETYPE __gnu_printf__
|
||||
#elif GNUC_PREREQ (4, 4, 0) && defined __MINGW32__
|
||||
# define PRINTF_ARCHETYPE __ms_printf__
|
||||
#else
|
||||
# define PRINTF_ARCHETYPE __printf__
|
||||
#endif
|
||||
#define ATTRIBUTE_FORMAT_PRINTF(string_index, first_to_check) \
|
||||
ATTRIBUTE_FORMAT ((PRINTF_ARCHETYPE, string_index, first_to_check))
|
||||
|
||||
#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST
|
||||
#define ATTRIBUTE_UNUSED _GL_UNUSED
|
||||
|
@ -286,7 +291,7 @@ extern int emacs_setenv_TZ (char const *);
|
|||
no_sanitize_address attribute. This bug is fixed in GCC 4.9.0 and
|
||||
clang 3.4. */
|
||||
#if (! ADDRESS_SANITIZER \
|
||||
|| ((4 < __GNUC__ + (9 <= __GNUC_MINOR__)) \
|
||||
|| (GNUC_PREREQ (4, 9, 0) \
|
||||
|| 3 < __clang_major__ + (4 <= __clang_minor__)))
|
||||
# define ADDRESS_SANITIZER_WORKAROUND /* No workaround needed. */
|
||||
#else
|
||||
|
|
|
@ -27,7 +27,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
#include "emacsgtkfixed.h"
|
||||
|
||||
/* Silence a bogus diagnostic; see GNOME bug 683906. */
|
||||
#if 4 < __GNUC__ + (7 <= __GNUC_MINOR__) && ! GLIB_CHECK_VERSION (2, 35, 7)
|
||||
#if GNUC_PREREQ (4, 7, 0) && ! GLIB_CHECK_VERSION (2, 35, 7)
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wunused-local-typedefs"
|
||||
#endif
|
||||
|
|
|
@ -1470,7 +1470,7 @@ INLINE_HEADER_END
|
|||
/* Suppress -Wsuggest-attribute=const if there are no scroll bars.
|
||||
This is for functions like x_set_horizontal_scroll_bars that have
|
||||
no effect in this case. */
|
||||
#if ! USE_HORIZONTAL_SCROLL_BARS && 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
|
||||
#if ! USE_HORIZONTAL_SCROLL_BARS && GNUC_PREREQ (4, 6, 0)
|
||||
# pragma GCC diagnostic ignored "-Wsuggest-attribute=const"
|
||||
#endif
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|||
#endif
|
||||
|
||||
#ifdef HAVE_MALLOC_H
|
||||
# if 4 < __GNUC__ + (2 <= __GNUC_MINOR__)
|
||||
# if GNUC_PREREQ (4, 2, 0)
|
||||
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
# endif
|
||||
# include <malloc.h>
|
||||
|
|
|
@ -4172,8 +4172,8 @@ extern void kill_buffer_processes (Lisp_Object);
|
|||
extern int wait_reading_process_output (intmax_t, int, int, bool, Lisp_Object,
|
||||
struct Lisp_Process *, int);
|
||||
/* Max value for the first argument of wait_reading_process_output. */
|
||||
#if __GNUC__ == 3 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 5)
|
||||
/* Work around a bug in GCC 3.4.2, known to be fixed in GCC 4.6.3.
|
||||
#if GNUC_PREREQ (3, 0, 0) && ! GNUC_PREREQ (4, 6, 0)
|
||||
/* Work around a bug in GCC 3.4.2, known to be fixed in GCC 4.6.0.
|
||||
The bug merely causes a bogus warning, but the warning is annoying. */
|
||||
# define WAIT_READING_MAX min (TYPE_MAXIMUM (time_t), INTMAX_MAX)
|
||||
#else
|
||||
|
@ -4546,8 +4546,7 @@ extern void *record_xmalloc (size_t) ATTRIBUTE_ALLOC_SIZE ((1));
|
|||
Build with CPPFLAGS='-DUSE_STACK_LISP_OBJECTS=0' to disable it. */
|
||||
|
||||
#if (!defined USE_STACK_LISP_OBJECTS \
|
||||
&& defined __GNUC__ && !defined __clang__ \
|
||||
&& !(4 < __GNUC__ + (3 < __GNUC_MINOR__ + (2 <= __GNUC_PATCHLEVEL__))))
|
||||
&& defined __GNUC__ && !defined __clang__ && ! GNUC_PREREQ (4, 3, 2))
|
||||
/* Work around GCC bugs 36584 and 35271, which were fixed in GCC 4.3.2. */
|
||||
# define USE_STACK_LISP_OBJECTS false
|
||||
#endif
|
||||
|
|
|
@ -130,10 +130,10 @@ extern int sys_select (int, fd_set *, fd_set *, fd_set *,
|
|||
struct timespec *, void *);
|
||||
#endif
|
||||
|
||||
/* Work around GCC 4.7.0 bug with strict overflow checking; see
|
||||
/* Work around GCC 4.3.0 bug with strict overflow checking; see
|
||||
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52904>.
|
||||
This bug appears to be fixed in GCC 5.1, so don't work around it there. */
|
||||
#if __GNUC__ == 4 && __GNUC_MINOR__ >= 3
|
||||
#if GNUC_PREREQ (4, 3, 0) && ! GNUC_PREREQ (5, 1, 0)
|
||||
# pragma GCC diagnostic ignored "-Wstrict-overflow"
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue