From: "akr (Akira Tanaka)" Date: 2013-05-07T22:26:28+09:00 Subject: [ruby-dev:47325] [ruby-trunk - Bug #8378][Open] json/generator/generator.c: warning: array subscript has type 'char' Issue #8378 has been reported by akr (Akira Tanaka). ---------------------------------------- Bug #8378: json/generator/generator.c: warning: array subscript has type 'char' https://bugs.ruby-lang.org/issues/8378 Author: akr (Akira Tanaka) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: r40599 ruby 2.1.0dev (2013-05-07) [i386-cygwin] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN ふと、cygwin を target とする cross-compile をしてみたところ、 以下の警告を見つけました。 (たぶん cross でなくても警告されると思います) make[2]: Entering directory `/extdisk/chkbuild/chkbuild/tmp/build/20130507T115727Z/ruby/ext/json/generator' compiling generator.c generator.c: In function 'isArrayOrObject': generator.c:897:5: warning: array subscript has type 'char' [-Wchar-subscripts] generator.c:898:5: warning: array subscript has type 'char' [-Wchar-subscripts] linking shared-object json/ext/generator.so http://www.rubyist.net/~akr/chkbuild/debian/crossruby-trunk-cygwin/log/20130507T115727Z.log.html.gz コードを見てみると以下のようになっていて、 char * を dereference した結果を isspace に渡しています。 895 char *p = RSTRING_PTR(string), *q = p + string_len - 1; 896 if (string_len < 2) return 0; 897 for (; p < q && isspace(*p); p++); 898 for (; q > p && isspace(*q); q--); 899 return (*p == '[' && *q == ']') || (*p == '{' && *q == '}'); char が signed な環境では、*p や *q は負になるかもしれないのでよろしくなくて、 *(unsigned char *)p とかにしたほうがいんじゃないでしょうか。 -- http://bugs.ruby-lang.org/