遠藤と申します。

1.9 で以下のようにすると落ちます。


$ ./ruby -e '$&;[]'
-e:1: -- control frame ----------
c:0003 p:0006 s:0006 b:0005 l:000004 d:000004 TOP    -e:1
c:0002 p:---- s:0003 b:0003 l:000002 d:000002 FINISH :inherited
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
---------------------------
-- backtrace of native function call (Use addr2line) --
0x80da8f5
0x80f3b40
0x80d7c26
0x80d8314
0x80d8709
0x8059042
0x8059066
0x805d5f1
0x8056d1f
0xb7df8ea8
0x8056c51
-------------------------------------------------------
[BUG] Stack consistency error (sp: 6, bp: 5)
ruby 1.9.0 (2007-06-27) [i686-linux]

アボートしました (core dumped)


$`;0 や $1;0 でも同様に落ちます。
getglobal のコードから推測するに、こんな感じでしょうか。
はずれてたらごめんなさい。


Index: compile.c
===================================================================
--- compile.c	(revision 12635)
+++ compile.c	(working copy)
@@ -3810,11 +3810,17 @@
       case NODE_NTH_REF:{
 	ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(1) /* '~'  */,
 		  INT2FIX(node->nd_nth << 1));
+	if (poped) {
+	    ADD_INSN(ret, nd_line(node), pop);
+	}
 	break;
       }
       case NODE_BACK_REF:{
 	ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(1) /* '~' */,
 		  INT2FIX(0x01 | (node->nd_nth << 1)));
+	if (poped) {
+	    ADD_INSN(ret, nd_line(node), pop);
+	}
 	break;
       }
       case NODE_MATCH:


-- 
Yusuke ENDOH <mame / tsg.ne.jp>