Project

General

Profile

Actions

Bug #20963

closed

compile error due to lack of MAYBE_UNUSED macro e.g. Oracle Developer Studio 12.x on Solaris 10

Added by ngoto (Naohisa Goto) about 9 hours ago. Updated about 6 hours ago.

Status:
Closed
Target version:
-
[ruby-core:120299]

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 */
Actions

Also available in: Atom PDF

Like0
Like0