nasm/autoconf/attribute.h

39 lines
1,001 B
C
Raw Permalink Normal View History

/*
* Define a macro for compiler attributes. Use either gcc
* syntax if __GNUC__ is defined, or try to look for the
* modern standard [[x]] attributes.
*
* Unfortunately [[x]] doesn't always work when it comes to
* GNUC-specific attributes, and some compilers support GCC
* syntax without __attribute__ just to be confusing.
* Therefore, this also needs an autoconf module to test
* the validity.
*
* Use #ifdef and not defined() here; some compilers do the wrong
* thing in the latter case.
*/
#ifndef ATTRIBUTE
# define MODERN_ATTRIBUTE(x) [[x]]
# ifndef __GNUC__
# ifdef __cplusplus
# ifdef __has_cpp_attribute
# define ATTRIBUTE(x) MODERN_ATTRIBUTE(x)
# endif
# endif
# ifndef ATTRIBUTE
# ifdef __has_c_attribute
# define ATTRIBUTE(x) MODERN_ATTRIBUTE(x)
# endif
# endif
# ifndef ATTRIBUTE
# ifdef __has_attribute
# define ATTRIBUTE(x) MODERN_ATTRIBUTE(x)
# endif
# endif
# endif
# ifndef ATTRIBUTE
# define ATTRIBUTE(x) __attribute__((x))
# endif
#endif