Issue #11644 has been updated by Naohisa Goto.


コマンドラインは正常だったので、やはりWarningが出たのが原因のようです。

以下のようにキャストするとFailureは出なくなりました。
(三項演算子のどちらか片方だけのキャストではダメでした。)
しかし、古いバージョンのコンパイラのバグっぽい挙動のために、全環境でキャストを入れるのは、
将来の型変更時のミス等を隠蔽するため有害な気がするので、
#ifdef 等で環境・コンパイラを限定してキャストするのがよいかと思っています。

~~~
--- include/ruby/ruby.h~	2015-11-02 23:46:44.317989704 +0900
+++ include/ruby/ruby.h	2015-11-03 20:27:45.085567608 +0900
@@ -2007,8 +2007,8 @@
 static inline const VALUE *
 rb_array_const_ptr(VALUE a)
 {
-    return (RBASIC(a)->flags & RARRAY_EMBED_FLAG) ?
-	RARRAY(a)->as.ary : RARRAY(a)->as.heap.ptr;
+    return (const VALUE *)((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ?
+	RARRAY(a)->as.ary : RARRAY(a)->as.heap.ptr);
 }
 
 static inline long
@@ -2021,8 +2021,8 @@
 static inline const VALUE *
 rb_struct_const_ptr(VALUE st)
 {
-    return (RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ?
-	RSTRUCT(st)->as.ary : RSTRUCT(st)->as.heap.ptr;
+    return (const VALUE *)((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ?
+	RSTRUCT(st)->as.ary : RSTRUCT(st)->as.heap.ptr);
 }
 
 #if defined(EXTLIB) && defined(USE_DLN_A_OUT)
~~~

----------------------------------------
Bug #11644: Since r52055, TestMkmf::TestConvertible failed on Solaris 10 with fcc
https://bugs.ruby-lang.org/issues/11644#change-54691

* Author: Naohisa Goto
* Status: Feedback
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0dev (2015-10-06) [sparc64-solaris2.10]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
r52055以降、Solaris 10 上の古いfcc (Fujitsu C Compiler) にてコンパイルすると、
make test-all にて
TestMkmf::TestConvertible#test_typeof_builtin
TestMkmf::TestConvertible#test_typeof_typedef
がfailureになります。

長いのでFailure部分のログはファイル(r52055-failure.log)にて添付します。

以下のようにポインタの型の不一致のWarningが出ているのが原因でしょうか?

~~~
"/XXXXX-52055/include/ruby/ruby.h", line 2003: warning: return incompatible pointer types: expected `const VALUE *' actual `const unsigned long *' in function `rb_array_const_ptr'
"/XXXXX-52055/include/ruby/ruby.h", line 2017: warning: return incompatible pointer types: expected `const VALUE *' actual `const unsigned long *' in function `rb_struct_const_ptr'
~~~

なお、Oracle Solaris Studio 12.3 など他のコンパイラではFailureにならず成功しています。

---Files--------------------------------
r52055-failure.log (8.02 KB)


-- 
https://bugs.ruby-lang.org/