mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-02-17 17:19:35 +08:00
39 lines
1001 B
C
39 lines
1001 B
C
/*
|
|
* 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
|