# New Ticket Created by  chromatic 
# Please include the string:  [perl #44811]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44811 >


Test 91 fails at this PASM with the -j flat on x86 Linux:

# An empty register should be false...
        clears
        if      S1, BAD10
        branch  OK10
BAD10:. print.  "not "
OK10:.  print.  "ok 10\n"

.   end

The problem *appears* to be an assertion in string_bool() failing, because the 
string is null.  The appropriate if opcode is:

opcode_t *
Parrot_if_s_ic (opcode_t *cur_opcode, PARROT_INTERP)  {
#line 317 "src/ops/core.ops"
    if (SREG(1) && string_bool(interp, SREG(1))) {
        return (opcode_t *)cur_opcode + cur_opcode[2];
    }
    return (opcode_t *)cur_opcode + 3;
}

The null test is important there.  The relevant op in the JIT (at least for 
x86) appears not to make the null test, so the call continues as normal.

I'm not a good enough x86 assembly programmer to fix things (I think the right 
code is to load the string pointer into a register, compare it to zero, and 
jump past the current opcode, but as for how to do that, I'm not sure), but 
it looks like an easy fix.

-- c

Reply via email to