[ruby-core:120299] [Ruby master Bug#20963] compile error due to lack of MAYBE_UNUSED macro e.g. Oracle Developer Studio 12.x on Solaris 10

Issue #20963 has been reported by ngoto (Naohisa Goto). ---------------------------------------- Bug #20963: compile error due to lack of MAYBE_UNUSED macro e.g. Oracle Developer Studio 12.x on Solaris 10 https://bugs.ruby-lang.org/issues/20963 * Author: ngoto (Naohisa Goto) * Status: Open * Assignee: ngoto (Naohisa Goto) * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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 */ ``` -- https://bugs.ruby-lang.org/
participants (1)
-
ngoto (Naohisa Goto)