From: KOSAKI Motohiro Date: 2011-06-13T22:28:40+09:00 Subject: [ruby-dev:43782] Re: [ruby-cvs:38869] nobu:r31690 (trunk): * gc.c (vm_xcalloc): use calloc provided by platforms. >> AIXでは0 size mallocでNULLが返るのでこまったことになっています。 >> >> この関数でsizeの新しい数値を返してそれを利用するパッチを書いてみました。 >> こんなのでよければコミットさせていただきますが、 >> やっぱり返り値を変えるのはどうかと思ったので、 >> 一度ご調査いただけますでしょうか? >> あるいは0 size mallocは今後は避けられないなどご意見いただきたいです。 >> よろしくお願いいたします。 興味があったので 0 size mallocの場所を調べてみたのですが compile.c の以下の場所のようです。 static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor) { (snip) /* make instruction sequence */ generated_iseq = ALLOC_N(VALUE, pos); insn_info_table = ALLOC_N(struct iseq_insn_info_entry, k); iseq->ic_entries = ALLOC_N(struct iseq_inline_cache_entry, iseq->ic_size); ///ここ MEMZERO(iseq->ic_entries, struct iseq_inline_cache_entry, iseq->ic_size); ご参考まで > えらいひと -------------------------------------------------------------------------------------------- [BUG] 0 size malloc ruby 1.9.3dev (2011-06-13 trunk 32059) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0001 p:---- s:0002 b:0002 l:000001 d:000001 TOP -- C level backtrace information ------------------------------------------- ./miniruby() [0x579549] vm_dump.c:797 ./miniruby() [0x4467e0] error.c:249 ./miniruby(rb_bug+0xae) [0x4468ab] error.c:266 ./miniruby() [0x45c628] gc.c:761 ./miniruby(ruby_xmalloc2+0x3f) [0x45c871] gc.c:843 ./miniruby() [0x54b90b] compile.c:1342 ./miniruby() [0x54ae01] compile.c:983 ./miniruby(rb_iseq_compile_node+0x608) [0x54a483] compile.c:535 ./miniruby() [0x55e3aa] iseq.c:413 ./miniruby(rb_iseq_new_with_opt+0x58) [0x55e414] iseq.c:424 ./miniruby(rb_iseq_new+0x54) [0x55e241] iseq.c:381 ./miniruby() [0x578363] vm.c:2112 ./miniruby() [0x469119] inits.c:55 ./miniruby(ruby_init+0x8f) [0x44aa63] eval.c:60 ./miniruby() [0x4149b6] main.c:37 /lib64/libc.so.6(__libc_start_main+0xed) [0x349a42143d] ./miniruby() [0x4148b9] -- Other runtime information ----------------------------------------------- 0: can't convert false into String (TypeError) make: *** [.rbconfig.time] Error 1