From 881a45347636c2895d1991ed6483bfdab39553fc Mon Sep 17 00:00:00 2001
From: Bruno Haible
Date: Sun, 13 Feb 2011 23:21:20 +0100
Subject: [PATCH 1/2] Don't interfere with a program's definition of __attribute__.
* lib/argp.h (__attribute__): Remove definition.
(_GL_ATTRIBUTE_FORMAT): New macro.
(argp_error, __argp_error, argp_failure, __argp_failure): Use it.
* lib/argp-fmtstream.h (__attribute__): Remove definition.
(_GL_ATTRIBUTE_FORMAT): New macro.
(__argp_fmtstream_printf, argp_fmtstream_printf): Use it.
* lib/argp-help.c (hol_entry_long_iterate): Use __attribute__ only for
GCC 3 or newer.
* lib/error.h (__attribute__): Remove definition.
(_GL_ATTRIBUTE_FORMAT): New macro.
(error, error_at_line): Use it.
* lib/hash.h (__attribute__): Remove definition.
(ATTRIBUTE_WUR): Update definition. Define always.
* lib/openat.h (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
* lib/sigpipe-die.h (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
* lib/vasnprintf.h (__attribute__): Remove definition.
(_GL_ATTRIBUTE_FORMAT): New macro.
(asnprintf, vasnprintf): Use it.
* lib/xalloc.h (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
(ATTRIBUTE_MALLOC, ATTRIBUTE_ALLOC_SIZE): Define always.
* lib/xmemdup0.h (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
* lib/xprintf.h (__attribute__): Remove definition.
(_GL_ATTRIBUTE_FORMAT): New macro.
(xprintf, xvprintf, xfprintf, xvfprintf): Use it.
* lib/xstrtol.h (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
* lib/xvasprintf.h (__attribute__): Remove definition.
(_GL_ATTRIBUTE_FORMAT): New macro.
(xasprintf, xvasprintf): Use it.
* tests/test-argmatch.c (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
* tests/test-exclude.c (__attribute__): Remove definition.
(ATTRIBUTE_NORETURN): Update definition. Define always.
Reported by Paul Eggert.
---
ChangeLog | 42 ++++++++++++++++++++++++++++++++++++++++++
lib/argp-fmtstream.h | 14 +++++++-------
lib/argp-help.c | 2 ++
lib/argp.h | 18 +++++++++---------
lib/error.h | 14 +++++++-------
lib/hash.h | 13 +++++--------
lib/openat.h | 10 +++-------
lib/sigpipe-die.h | 10 +++-------
lib/vasnprintf.h | 14 +++++++-------
lib/xalloc.h | 30 +++++++++++-------------------
lib/xmemdup0.h | 10 +++-------
lib/xprintf.h | 18 +++++++++---------
lib/xstrtol.h | 10 +++-------
lib/xvasprintf.h | 14 +++++++-------
tests/test-argmatch.c | 12 ++++--------
tests/test-exclude.c | 11 ++++-------
16 files changed, 126 insertions(+), 116 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 12b6b5e..8a363a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,47 @@
2011-02-13 Bruno Haible
+ Don't interfere with a program's definition of __attribute__.
+ * lib/argp.h (__attribute__): Remove definition.
+ (_GL_ATTRIBUTE_FORMAT): New macro.
+ (argp_error, __argp_error, argp_failure, __argp_failure): Use it.
+ * lib/argp-fmtstream.h (__attribute__): Remove definition.
+ (_GL_ATTRIBUTE_FORMAT): New macro.
+ (__argp_fmtstream_printf, argp_fmtstream_printf): Use it.
+ * lib/argp-help.c (hol_entry_long_iterate): Use __attribute__ only for
+ GCC 3 or newer.
+ * lib/error.h (__attribute__): Remove definition.
+ (_GL_ATTRIBUTE_FORMAT): New macro.
+ (error, error_at_line): Use it.
+ * lib/hash.h (__attribute__): Remove definition.
+ (ATTRIBUTE_WUR): Update definition. Define always.
+ * lib/openat.h (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ * lib/sigpipe-die.h (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ * lib/vasnprintf.h (__attribute__): Remove definition.
+ (_GL_ATTRIBUTE_FORMAT): New macro.
+ (asnprintf, vasnprintf): Use it.
+ * lib/xalloc.h (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ (ATTRIBUTE_MALLOC, ATTRIBUTE_ALLOC_SIZE): Define always.
+ * lib/xmemdup0.h (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ * lib/xprintf.h (__attribute__): Remove definition.
+ (_GL_ATTRIBUTE_FORMAT): New macro.
+ (xprintf, xvprintf, xfprintf, xvfprintf): Use it.
+ * lib/xstrtol.h (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ * lib/xvasprintf.h (__attribute__): Remove definition.
+ (_GL_ATTRIBUTE_FORMAT): New macro.
+ (xasprintf, xvasprintf): Use it.
+ * tests/test-argmatch.c (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ * tests/test-exclude.c (__attribute__): Remove definition.
+ (ATTRIBUTE_NORETURN): Update definition. Define always.
+ Reported by Paul Eggert.
+
+2011-02-13 Bruno Haible
+
mbrtowc: Work around native Windows bug.
* m4/mbrtowc.m4 (gl_MBRTOWC_RETVAL): Detect native Windows bug. Use the
guess when no suitable locale for testing was found.
diff --git a/lib/argp-fmtstream.h b/lib/argp-fmtstream.h
index 1642b0f..f664254 100644
--- a/lib/argp-fmtstream.h
+++ b/lib/argp-fmtstream.h
@@ -28,16 +28,16 @@
#include
#include
-#ifndef __attribute__
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
- We enable __attribute__ only if these are supported too, because
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
gnulib and libintl do '#define printf __printf__' when they override
the 'printf' function. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(Spec) /* empty */
-# endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
#endif
#if (_LIBC - 0 && !defined (USE_IN_LIBIO)) \
@@ -128,10 +128,10 @@ extern void argp_fmtstream_free (argp_fmtstream_t __fs);
extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs,
const char *__fmt, ...)
- __attribute__ ((__format__ (printf, 2, 3)));
+ _GL_ATTRIBUTE_FORMAT ((printf, 2, 3));
extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs,
const char *__fmt, ...)
- __attribute__ ((__format__ (printf, 2, 3)));
+ _GL_ATTRIBUTE_FORMAT ((printf, 2, 3));
#if _LIBC || !defined __OPTIMIZE__
extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
diff --git a/lib/argp-help.c b/lib/argp-help.c
index 99f4a65..48c37a9 100644
--- a/lib/argp-help.c
+++ b/lib/argp-help.c
@@ -570,7 +570,9 @@ hol_entry_short_iterate (const struct hol_entry *entry,
}
static inline int
+#if __GNUC__ >= 3
__attribute__ ((always_inline))
+#endif
hol_entry_long_iterate (const struct hol_entry *entry,
int (*func)(const struct argp_option *opt,
const struct argp_option *real,
diff --git a/lib/argp.h b/lib/argp.h
index dfb88d7..c0483ab 100644
--- a/lib/argp.h
+++ b/lib/argp.h
@@ -34,16 +34,16 @@
# define __NTH(fct) fct __THROW
#endif
-#ifndef __attribute__
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
- We enable __attribute__ only if these are supported too, because
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
gnulib and libintl do '#define printf __printf__' when they override
the 'printf' function. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(Spec) /* empty */
-# endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
#endif
/* GCC 2.95 and later have "__restrict"; C99 compilers have
@@ -530,10 +530,10 @@ extern void __argp_usage (const struct argp_state *__state);
message, then exit (1). */
extern void argp_error (const struct argp_state *__restrict __state,
const char *__restrict __fmt, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
extern void __argp_error (const struct argp_state *__restrict __state,
const char *__restrict __fmt, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
/* Similar to the standard gnu error-reporting function error(), but will
respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
@@ -546,11 +546,11 @@ extern void __argp_error (const struct argp_state *__restrict __state,
extern void argp_failure (const struct argp_state *__restrict __state,
int __status, int __errnum,
const char *__restrict __fmt, ...)
- __attribute__ ((__format__ (__printf__, 4, 5)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
extern void __argp_failure (const struct argp_state *__restrict __state,
int __status, int __errnum,
const char *__restrict __fmt, ...)
- __attribute__ ((__format__ (__printf__, 4, 5)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
#if _LIBC || !defined __USE_EXTERN_INLINES
/* Returns true if the option OPT is a valid short option. */
diff --git a/lib/error.h b/lib/error.h
index 9a2a566..80f81bc 100644
--- a/lib/error.h
+++ b/lib/error.h
@@ -19,16 +19,16 @@
#ifndef _ERROR_H
#define _ERROR_H 1
-#ifndef __attribute__
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
- We enable __attribute__ only if these are supported too, because
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
gnulib and libintl do '#define printf __printf__' when they override
the 'printf' function. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(Spec) /* empty */
-# endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
#endif
#ifdef __cplusplus
@@ -40,11 +40,11 @@ extern "C" {
If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
extern void error (int __status, int __errnum, const char *__format, ...)
- __attribute__ ((__format__ (__printf__, 3, 4)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
extern void error_at_line (int __status, int __errnum, const char *__fname,
unsigned int __lineno, const char *__format, ...)
- __attribute__ ((__format__ (__printf__, 5, 6)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6));
/* If NULL, error will flush stdout, then print on stderr the program
name, a colon and a space. Otherwise, error will call this
diff --git a/lib/hash.h b/lib/hash.h
index 9c2f5b7..19671f6 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -27,15 +27,12 @@
# include
# include
-/* The warn_unused_result attribute appeared first in gcc-3.4.0 */
-# ifndef __attribute__
-# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)
-# define __attribute__(x)
-# endif
-# endif
-
-# ifndef ATTRIBUTE_WUR
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The warn_unused_result attribute appeared first in gcc-3.4.0. */
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
# define ATTRIBUTE_WUR __attribute__ ((__warn_unused_result__))
+# else
+# define ATTRIBUTE_WUR /* empty */
# endif
typedef size_t (*Hash_hasher) (const void *, size_t);
diff --git a/lib/openat.h b/lib/openat.h
index dd0bb01..9cf7e0f 100644
--- a/lib/openat.h
+++ b/lib/openat.h
@@ -27,14 +27,10 @@
#include
#include
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x) /* empty */
-# endif
-#endif
-
-#ifndef ATTRIBUTE_NORETURN
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#else
+# define ATTRIBUTE_NORETURN /* empty */
#endif
#if !HAVE_OPENAT
diff --git a/lib/sigpipe-die.h b/lib/sigpipe-die.h
index e725c16..4cbd920 100644
--- a/lib/sigpipe-die.h
+++ b/lib/sigpipe-die.h
@@ -47,14 +47,10 @@ extern "C" {
#endif
-# ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x)
-# endif
-# endif
-
-# ifndef ATTRIBUTE_NORETURN
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# else
+# define ATTRIBUTE_NORETURN /* empty */
# endif
/* Emit an error message indicating a SIGPIPE signal, and terminate the
diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h
index 3d00df9..0ab7d19 100644
--- a/lib/vasnprintf.h
+++ b/lib/vasnprintf.h
@@ -24,16 +24,16 @@
/* Get size_t. */
#include
-#ifndef __attribute__
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
- We enable __attribute__ only if these are supported too, because
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
gnulib and libintl do '#define printf __printf__' when they override
the 'printf' function. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(Spec) /* empty */
-# endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
#endif
#ifdef __cplusplus
@@ -69,9 +69,9 @@ extern "C" {
# define vasnprintf rpl_vasnprintf
#endif
extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
- __attribute__ ((__format__ (__printf__, 3, 4)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
- __attribute__ ((__format__ (__printf__, 3, 0)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0));
#ifdef __cplusplus
}
diff --git a/lib/xalloc.h b/lib/xalloc.h
index aaec116..30823b7 100644
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -26,30 +26,22 @@ extern "C" {
# endif
-# ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x)
-# endif
-# endif
-
-# ifndef ATTRIBUTE_NORETURN
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# else
+# define ATTRIBUTE_NORETURN /* empty */
# endif
-# ifndef ATTRIBUTE_MALLOC
-# if __GNUC__ >= 3
-# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
-# else
-# define ATTRIBUTE_MALLOC
-# endif
+# if __GNUC__ >= 3
+# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define ATTRIBUTE_MALLOC
# endif
-# ifndef ATTRIBUTE_ALLOC_SIZE
-# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
-# define ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
-# else
-# define ATTRIBUTE_ALLOC_SIZE(args)
-# endif
+# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+# define ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
+# else
+# define ATTRIBUTE_ALLOC_SIZE(args)
# endif
/* This function is always triggered when memory is exhausted.
diff --git a/lib/xmemdup0.h b/lib/xmemdup0.h
index 8b50072..ff118a6 100644
--- a/lib/xmemdup0.h
+++ b/lib/xmemdup0.h
@@ -25,14 +25,10 @@
extern "C" {
# endif
-# ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x)
-# endif
-# endif
-
-# ifndef ATTRIBUTE_NORETURN
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# else
+# define ATTRIBUTE_NORETURN /* empty */
# endif
/* This function is always triggered when memory is exhausted.
diff --git a/lib/xprintf.h b/lib/xprintf.h
index 9dd0443..ca48ce7 100644
--- a/lib/xprintf.h
+++ b/lib/xprintf.h
@@ -20,26 +20,26 @@
#include
#include
-#ifndef __attribute__
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
- We enable __attribute__ only if these are supported too, because
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
gnulib and libintl do '#define printf __printf__' when they override
the 'printf' function. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(Spec) /* empty */
-# endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
#endif
extern int xprintf (char const *restrict format, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2));
extern int xvprintf (char const *restrict format, va_list args)
- __attribute__ ((__format__ (__printf__, 1, 0)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0));
extern int xfprintf (FILE *restrict stream, char const *restrict format, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
extern int xvfprintf (FILE *restrict stream, char const *restrict format,
va_list args)
- __attribute__ ((__format__ (__printf__, 2, 0)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 0));
#endif
diff --git a/lib/xstrtol.h b/lib/xstrtol.h
index 530afc9..f91d864 100644
--- a/lib/xstrtol.h
+++ b/lib/xstrtol.h
@@ -51,14 +51,10 @@ _DECLARE_XSTRTOL (xstrtoll, long long int)
_DECLARE_XSTRTOL (xstrtoull, unsigned long long int)
#endif
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x)
-# endif
-#endif
-
-#ifndef ATTRIBUTE_NORETURN
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#else
+# define ATTRIBUTE_NORETURN /* empty */
#endif
/* Report an error for an invalid integer in an option argument.
diff --git a/lib/xvasprintf.h b/lib/xvasprintf.h
index 1ac3342..197c9ea 100644
--- a/lib/xvasprintf.h
+++ b/lib/xvasprintf.h
@@ -20,16 +20,16 @@
/* Get va_list. */
#include
-#ifndef __attribute__
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
- We enable __attribute__ only if these are supported too, because
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
gnulib and libintl do '#define printf __printf__' when they override
the 'printf' function. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(Spec) /* empty */
-# endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
#endif
#ifdef __cplusplus
@@ -44,9 +44,9 @@ extern "C" {
- [EILSEQ] error during conversion between wide and multibyte characters,
return NULL. */
extern char *xasprintf (const char *format, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2));
extern char *xvasprintf (const char *format, va_list args)
- __attribute__ ((__format__ (__printf__, 1, 0)));
+ _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0));
#ifdef __cplusplus
}
diff --git a/tests/test-argmatch.c b/tests/test-argmatch.c
index 4ec5fec..57ec0d5 100644
--- a/tests/test-argmatch.c
+++ b/tests/test-argmatch.c
@@ -29,15 +29,11 @@
/* Some packages define ARGMATCH_DIE and ARGMATCH_DIE_DECL in , and
thus must link with a definition of that function. Provide it here. */
#ifdef ARGMATCH_DIE_DECL
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x) /* empty */
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# else
+# define ATTRIBUTE_NORETURN /* empty */
# endif
-#endif
-
-#ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif
ARGMATCH_DIE_DECL ATTRIBUTE_NORETURN;
ARGMATCH_DIE_DECL { exit (1); }
diff --git a/tests/test-exclude.c b/tests/test-exclude.c
index eed4b28..bab4676 100644
--- a/tests/test-exclude.c
+++ b/tests/test-exclude.c
@@ -63,16 +63,13 @@ ARGMATCH_VERIFY (exclude_keywords, exclude_flags);
/* Some packages define ARGMATCH_DIE and ARGMATCH_DIE_DECL in , and
thus must link with a definition of that function. Provide it here. */
#ifdef ARGMATCH_DIE_DECL
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __attribute__(x) /* empty */
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# else
+# define ATTRIBUTE_NORETURN /* empty */
# endif
#endif
-#ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif
-
ARGMATCH_DIE_DECL ATTRIBUTE_NORETURN;
ARGMATCH_DIE_DECL { exit (1); }
#endif
--
1.6.3.2