mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04: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
 |