Bug #20963
closedcompile error due to lack of MAYBE_UNUSED macro e.g. Oracle Developer Studio 12.x on Solaris 10
Description
On Solaris 10, by using Oracle Developer Studio 12.5, strange compile error occurred.
cc -errtags=yes -xO4 -xtarget=sparc64xplus -m64 -g -erroff=E_STATEMENT_NOT_REACHED -erroff=E_INIT_SIGN_EXTEND -erroff=E_INIT_DOES_NOT_FIT -erroff=E_INITIALIZATION_TYPE_MISMATCH -DRUBY_EXPORT -I. -I.ext/include/sparc64-solaris2.10 -I../ruby.devel/include -I../ruby.devel -I../ruby.devel/prism -I../ruby.devel/enc/unicode/15.0.0 -D_XOPEN_SOURCE=600 -I/usr/local/64/lib/libffi-3.0.10/include -I/usr/local/64/include -o main.o -c ../ruby.devel/main.c
"../ruby.devel/include/ruby/internal/value.h", line 128: only "register" valid as formal parameter storage class
"../ruby.devel/include/ruby/internal/value.h", line 128: warning: old-style declaration or incorrect type for: MAYBE_UNUSED (E_OLD_STYLE_DECL_OR_BAD_TYPE)
"../ruby.devel/include/ruby/internal/value.h", line 129: only "register" valid as formal parameter storage class
"../ruby.devel/include/ruby/internal/value.h", line 129: warning: old-style declaration or incorrect type for: MAYBE_UNUSED (E_OLD_STYLE_DECL_OR_BAD_TYPE)
"../ruby.devel/include/ruby/internal/value.h", line 130: only "register" valid as formal parameter storage class
"../ruby.devel/include/ruby/internal/value.h", line 130: warning: old-style declaration or incorrect type for: MAYBE_UNUSED (E_OLD_STYLE_DECL_OR_BAD_TYPE)
"../ruby.devel/include/ruby/internal/value.h", line 131: only "register" valid as formal parameter storage class
"../ruby.devel/include/ruby/internal/value.h", line 131: warning: old-style declaration or incorrect type for: MAYBE_UNUSED (E_OLD_STYLE_DECL_OR_BAD_TYPE)
cc: acomp failed for ../ruby.devel/main.c
make: *** [main.o] Error 2
In include/ruby/internal/static_assert.h, MAYBE_UNUSED is used without considering the possibility that it may not be defined.
The macro MAYBE_UNUSED is defined in config.h after checking existence of __unused__
attribute by ./configure, but the attribute is only available in GCC or GCC-like compilers.
The following patch resolves the issue.
I think it is good to use RBIMPL_ATTR_MAYBE_UNUSED()
macro which is defined in ruby/internal/attr/maybe_unused.h.
--- a/include/ruby/internal/static_assert.h
+++ b/include/ruby/internal/static_assert.h
@@ -23,6 +23,7 @@
#include <assert.h>
#include "ruby/internal/has/extension.h"
#include "ruby/internal/compiler_since.h"
+#include "ruby/internal/attr/maybe_unused.h"
/** @cond INTERNAL_MACRO */
#if defined(__cplusplus) && defined(__cpp_static_assert)
@@ -71,7 +72,7 @@
#else
# define RBIMPL_STATIC_ASSERT(name, expr) \
- MAYBE_UNUSED(typedef int static_assert_ ## name ## _check[1 - 2 * !(expr)])
+ RBIMPL_ATTR_MAYBE_UNUSED() typedef int static_assert_ ## name ## _check[1 - 2 * !(expr)]
#endif
#endif /* RBIMPL_STATIC_ASSERT_H */
Updated by ngoto (Naohisa Goto) about 6 hours ago
- Status changed from Open to Closed
Applied in changeset git|528ec7060464d30359e593055df6b53362cd1060.
use RBIMPL_ATTR_MAYBE_UNUSED
The macro MAYBE_UNUSED, prepared by ./configure, may not be defined in
some environments such as Oracle Developer Studio 12.5 on Solaris 10.
This fixes [Bug #20963]