On Fri Apr 04 22:28:31 2008, [EMAIL PROTECTED] wrote: > On Thursday 03 April 2008 11:22:16 Andy Dougherty wrote: > > > First, deep inside IMCC_subst_constants() in compilers/imcc/optimizer.c, > > when the divide by zero fails, it returns a NULL value, but forgets to > > also set the undocumented "return" value for 'ok'. The appended patch > > sets it to 0, figuring all is not ok if we encountered an exception. > > > > This is a problem because in compilers/imcc/parser_util.c, inside INS(), > > the ok variable is never initialized. Apparently, on x86, it ends up > > filled with some non-zero value, but on SPARC it ends up as a zero. > > The appended patch initializes the variable. > > > > What to do with the return values, however, is a different question. > > After this patch is applied, the information that an exception occured > > has now correctly propagated up to the INS() function, but it's not > > at all clear to me what to do with it from here. > > Agreed. > > > diff -r -u parrot-svn/compilers/imcc/optimizer.c > > parrot-andy/compilers/imcc/optimizer.c --- > > parrot-svn/compilers/imcc/optimizer.c 2008-03-31 15:14:39.000000000 -0400 > > +++ parrot-andy/compilers/imcc/optimizer.c 2008-04-03 13:14:52.000000000 > > -0400 @@ -976,8 +976,10 @@ > > * from the result > > */ > > branched = eval_ins(interp, op, found, r); > > - if (branched == -1) > > + if (branched == -1) { > > + *ok = 0; /* XXX Is this return value sensible? */ > > return NULL; > > + } > > Sadly, this part doesn't work because of the other call to this function. > I've applied the rest of the patch with some tweaks as r26763. > > -- c >
Andy, does this test pass for you now?