# HG changeset patch # User Bruno Haible # Date 1297635680 -3600 # Node ID 4cf3b58aaf12f3f383a7816fc71ba64a660fc41b # Parent 8dc67a54b4605887ef4c8b44faab8bfdbd5cd55d 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. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +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: Add more tests for native Windows platforms. diff --git a/lib/argp-fmtstream.h b/lib/argp-fmtstream.h --- 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 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 --- a/lib/argp-help.c +++ b/lib/argp-help.c @@ -570,7 +570,9 @@ } 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 --- 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 @@ 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_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 --- 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 @@ 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 --- 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 --- 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 --- a/lib/sigpipe-die.h +++ b/lib/sigpipe-die.h @@ -47,14 +47,10 @@ #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 --- 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 @@ # 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 --- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -26,30 +26,22 @@ # 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 --- 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 --- 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 --- a/lib/xstrtol.h +++ b/lib/xstrtol.h @@ -51,14 +51,10 @@ _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 --- 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 @@ - [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 --- 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 --- a/tests/test-exclude.c +++ b/tests/test-exclude.c @@ -63,16 +63,13 @@ /* 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