[#11073] segfault printing instruction sequence for iterator — <noreply@...>
Bugs item #10527, was opened at 2007-05-02 14:42
Hi,
On Thu, May 10, 2007 at 04:51:18PM +0900, Nobuyoshi Nakada wrote:
Hi,
Hi,
This seems to make valgrind much happier.
On Thu, May 17, 2007 at 11:14:35PM +0900, Paul Brannan wrote:
Hi,
Now 'a' shows up twice in the local table:
Hi,
[#11082] Understanding code: Kernel#require and blocks. — Hugh Sasse <hgs@...>
I'm trying to debug a Rails application which complains about an
On 5/4/07, Hugh Sasse <hgs@dmu.ac.uk> wrote:
On Fri, 4 May 2007, George wrote:
On Fri, May 04, 2007 at 06:18:19PM +0900, Hugh Sasse wrote:
[#11108] pattern for implementation-private constants? — David Flanagan <david@...>
Hi,
I believe there isn't a way, but I don't think it's really necessary. Just
[#11127] Bugs that can be closed — "Jano Svitok" <jan.svitok@...>
I propose closing these bugs as invalid:
[#11145] Rational comparison to 0 fails when denominator is != 1 — <noreply@...>
Bugs item #10739, was opened at 2007-05-10 22:06
Hi,
[#11169] Allow back reference with nest level in Oniguruma for Ruby again — =?ISO-8859-15?Q?Wolfgang_N=E1dasi-Donner?= <wonado@...>
Remark: I posted this text in comp.lang.ruby first, but Matz told me,
Does it make sense or is it required to write this as a RCR?
[#11176] FileUtils.rm_rf misfeature? — johan556@...
Hi!
[#11210] Pathname ascend and descend inclusive parameter — TRANS <transfire@...>
I would like to suggest that Pathname#ascend and Pathname#descend
[#11234] Planning to release 1.8.6 errata — Urabe Shyouhei <shyouhei@...>
Hi all.
On 25/05/07, Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:
[#11252] Init_stack and ruby_init_stack fail to reinit stack (threads problem?) — <noreply@...>
Bugs item #11134, was opened at 2007-05-25 12:14
Hi,
Nobuyoshi Nakada wrote:
[#11255] ruby_1_8_6 build problem (make install-doc) — johan556@...
Hi!
[#11271] providing better support through rubyforge tracker categories — Ryan Davis <ryand-ruby@...>
I'm going to make more categories for the trackers (bugs and patches)
[#11367] BUG: next in lambda: 1.8.6 differs from 1.8.4 and 1.9.0 — David Flanagan <david@...>
A toplevel next statement in a lambda does not return a value in 1.8.6,
[#11368] $2000 USD Reward for help fixing Segmentation Fault in GC — Brent Roman <brent@...>
Hi Brent,
Re: [ ruby-Bugs-10527 ] segfault printing instruction sequence for iterator
Hi,
At Fri, 18 May 2007 22:17:34 +0900,
Paul Brannan wrote in [ruby-core:11203]:
> I reapplied the patch and rebuilt, and now I get the same disasm output
> as you. However, I still get the warning from valgrind (invalid read of
> size 4 at iseq.c:763).
>
> Also, if you dump to array and reload:
>
> i = VM::InstructionSequence.new('for a in []; end')
> puts i.disasm
> a = i.to_a
> i2 = VM::InstructionSequence.load(a)
> puts i2.disasm
>
> do you see the order of the table entries change?
Yes, and found line numbers disappear in the result of disasm.
I'll talk ko1 about it.
Index: compile.c
===================================================================
--- compile.c (revision 12338)
+++ compile.c (working copy)
@@ -4826,11 +4826,20 @@ iseq_build_from_ary(rb_iseq_t *iseq, VAL
}
- iseq->local_size = opt + RARRAY_LEN(locals);
- iseq->local_table_size = iseq->local_size;
+ iseq->local_table_size = RARRAY_LEN(locals);
+ iseq->local_size = opt + iseq->local_table_size;
+ if (iseq->local_table_size) {
iseq->local_table = (ID *)ALLOC_N(ID *, iseq->local_size);
- tbl = iseq->local_table + opt;
+ tbl = iseq->local_table;
for (i=0; i<RARRAY_LEN(locals); i++) {
- tbl[i] = SYM2ID(RARRAY_PTR(locals)[i]);
+ VALUE lv = RARRAY_PTR(locals)[i];
+ tbl[i] = FIXNUM_P(lv) ? FIX2INT(lv) : SYM2ID(lv);
+ }
+ if (opt) {
+ tbl[i] = (ID)-1;
+ }
+ }
+ else {
+ iseq->local_table = NULL;
}
Index: iseq.c
===================================================================
--- iseq.c (revision 12338)
+++ iseq.c (working copy)
@@ -765,5 +765,5 @@ ruby_iseq_disasm(VALUE self)
rb_str_cat2(str, buff);
- for (i = 0; i < iseqdat->local_table_size; i++) {
+ for (i = 0; i < iseqdat->local_size; i++) {
const char *name = rb_id2name(tbl[i]);
char info[0x100];
@@ -1146,5 +1146,5 @@ iseq_data_to_ary(rb_iseq_t *iseq)
ID lid = iseq->local_table[i];
if (lid) {
- if (rb_id2str(lid)) rb_ary_push(locals, ID2SYM(lid));
+ rb_ary_push(locals, rb_id2str(lid) ? ID2SYM(lid) : INT2FIX(lid));
}
else {
--
Nobu Nakada