diff options
| author | 卜部昌平 <shyouhei@ruby-lang.org> | 2020-04-16 17:00:13 +0900 |
|---|---|---|
| committer | 卜部昌平 <shyouhei@ruby-lang.org> | 2020-04-16 17:19:37 +0900 |
| commit | 3eb05a8071815cfbb2500e624ad675f324cc72fa (patch) | |
| tree | c771b99fa064c1e88aff6f4fc6228638b41c43e4 /include/ruby/3/has/attribute.h | |
| parent | 4ab14aece4ee96354b3f10da7083caf7a7bf74dd (diff) | |
fix compiler error on gcc 4.x
It seems gcc prior to 5 suffered from preprocessor bug. We have to
provide workarounds.
See https://github.com/ruby/ruby/runs/591138012
----
Here is something interesting. According to C99, strictly speaking,
the gcc behaviour was in fact legal(!) and everything else were
wrong. This was not a bug of gcc, rather a bug of the ISO C Standard.
This defect was reported to the committee as DR#412, and fixed
accordingly. All tested compilers now conform C17's updated
preprocessor description.
See http://www.open-std.org/JTC1/SC22/WG14/www/docs/dr_412.htm
Diffstat (limited to 'include/ruby/3/has/attribute.h')
| -rw-r--r-- | include/ruby/3/has/attribute.h | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/include/ruby/3/has/attribute.h b/include/ruby/3/has/attribute.h index 39ce321a4f..8fa70257ce 100644 --- a/include/ruby/3/has/attribute.h +++ b/include/ruby/3/has/attribute.h @@ -24,14 +24,13 @@ #include "ruby/3/compiler_since.h" #include "ruby/3/token_paste.h" -#ifndef __has_attribute -# /* Don't bother. */ -#elif RUBY3_COMPILER_IS(GCC) && ! __has_attribute(pure) -# /* FreeBSD's <sys/cdefs.h> defines its own *broken* version of -# * __has_attribute. Cygwin copied that content to be a victim of the broken- -# * ness. We don't take them into account. */ -#else -# define RUBY3_HAVE___HAS_ATTRIBUTE 1 +#if defined(__has_attribute) +# if __has_attribute(pure) || RUBY3_COMPILER_IS(GCC) +# /* FreeBSD's <sys/cdefs.h> defines its own *broken* version of +# * __has_attribute. Cygwin copied that content to be a victim of the +# * broken-ness. We don't take them into account. */ +# define RUBY3_HAVE___HAS_ATTRIBUTE 1 +# endif #endif /** Wraps (or simulates) `__has_attribute`. */ |
