Closed Bug 1151323 Opened 6 years ago Closed 6 years ago

Assertion failure: output.type() == MIRTypeFromValueType(type), at js/src/jit/MacroAssembler.cpp:808 with --unboxed-objects

Categories

(Core :: JavaScript Engine, defect)

x86
Linux
defect
Not set
critical

Tracking

()

RESOLVED FIXED
mozilla40
Tracking Status
firefox40 --- fixed

People

(Reporter: decoder, Assigned: bhackett1024)

Details

(Keywords: assertion, regression, testcase, Whiteboard: [jsbugmon:update])

Attachments

(1 file)

The following testcase crashes on mozilla-central revision 90adc073cbc6 (build with --enable-optimize --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --target=i686-pc-linux-gnu --disable-tests --enable-debug, run with --unboxed-objects --ion-offthread-compile=off --ion-eager):

function map_test(cases) {
    for (var i = 0; i < cases.length; i++) {
        var expected = cases[i].expected;
    }
}
map_test([{ input: 8, expected: 1114369}, { input: -1, expected: 0}]);
map_test([{ expected: 16777215}, { expected: 4294967241 }]);



Backtrace:

Program received signal SIGSEGV, Segmentation fault.
0x0862dda4 in js::jit::MacroAssembler::loadUnboxedProperty<js::jit::Address> (this=0xf7ab1030, address=..., type=JSVAL_TYPE_INT32, output=...) at js/src/jit/MacroAssembler.cpp:808
#0  0x0862dda4 in js::jit::MacroAssembler::loadUnboxedProperty<js::jit::Address> (this=0xf7ab1030, address=..., type=JSVAL_TYPE_INT32, output=...) at js/src/jit/MacroAssembler.cpp:808
#1  0x08481dfa in js::jit::CodeGenerator::emitGetPropertyPolymorphic (this=this@entry=0xf7ab1000, ins=ins@entry=0xf7aa6110, obj=obj@entry=..., scratch=..., output=...) at js/src/jit/CodeGenerator.cpp:2309
#2  0x084823a9 in js::jit::CodeGenerator::visitGetPropertyPolymorphicT (this=0xf7ab1000, ins=0xf7aa6110) at js/src/jit/CodeGenerator.cpp:2348
#3  0x08618f59 in js::jit::LGetPropertyPolymorphicT::accept (this=0xf7aa6110, visitor=0xf7ab1000) at js/src/jit/LIR-Common.h:5333
#4  0x084a876b in js::jit::CodeGenerator::generateBody (this=this@entry=0xf7ab1000) at js/src/jit/CodeGenerator.cpp:4029
#5  0x084a8eb8 in js::jit::CodeGenerator::generate (this=this@entry=0xf7ab1000) at js/src/jit/CodeGenerator.cpp:7418
#6  0x085036cd in js::jit::GenerateCode (mir=mir@entry=0xf7aa1150, lir=0xf7aa4f90) at js/src/jit/Ion.cpp:1600
#7  0x08568257 in js::jit::CompileBackEnd (mir=mir@entry=0xf7aa1150) at js/src/jit/Ion.cpp:1621
#8  0x08569249 in IonCompile (optimizationLevel=<optimized out>, recompile=false, constructing=<optimized out>, osrPc=0xf7a96b35 "\343\201V", baselineFrame=0xffffb9e0, script=<optimized out>, cx=0xf7a87040) at js/src/jit/Ion.cpp:1983
#9  js::jit::Compile (cx=cx@entry=0xf7a87040, script=script@entry=..., osrFrame=osrFrame@entry=0xffffb9e0, osrPc=osrPc@entry=0xf7a96b35 "\343\201V", constructing=false, forceRecompile=forceRecompile@entry=false) at js/src/jit/Ion.cpp:2138
#10 0x08569493 in js::jit::CanEnterAtBranch (cx=cx@entry=0xf7a87040, script=0xf5f49160, osrFrame=osrFrame@entry=0xffffb9e0, pc=pc@entry=0xf7a96b35 "\343\201V") at js/src/jit/Ion.cpp:2220
#11 0x08460e52 in EnsureCanEnterIon (stub=0xf7a21728, jitcodePtr=<synthetic pointer>, pc=0xf7a96b35 "\343\201V", script=..., frame=0xffffb9e0, cx=0xf7a87040) at js/src/jit/BaselineIC.cpp:779
#12 js::jit::DoWarmUpCounterFallback (cx=0xf7a87040, stub=0xf7a21728, frame=0xffffb9e0, infoPtr=0xffffb9bc) at js/src/jit/BaselineIC.cpp:943
#13 0xf7fcd8eb in ?? ()
#14 0xf7a21728 in ?? ()
#15 0xf7fc8a74 in ?? ()
eax	0x0	0
ebx	0x962972c	157456172
ecx	0xf7e2f88c	-136120180
edx	0x0	0
esi	0x1	1
edi	0xf7aa3ac8	-139838776
ebp	0xffffb4c8	4294948040
esp	0xffffb440	4294947904
eip	0x862dda4 <js::jit::MacroAssembler::loadUnboxedProperty<js::jit::Address>(js::jit::Address, JSValueType, js::jit::TypedOrValueRegister)+1652>
=> 0x862dda4 <js::jit::MacroAssembler::loadUnboxedProperty<js::jit::Address>(js::jit::Address, JSValueType, js::jit::TypedOrValueRegister)+1652>:	movl   $0x328,0x0
   0x862ddae <js::jit::MacroAssembler::loadUnboxedProperty<js::jit::Address>(js::jit::Address, JSValueType, js::jit::TypedOrValueRegister)+1662>:	call   0x8066680 <abort@plt>
Whiteboard: [jsbugmon:update,bisect] → [jsbugmon:update]
JSBugMon: Bisection requested, result:
=== Treeherder Build Bisection Results by autoBisect ===

The "good" changeset has the timestamp "20150312160100" and the hash "69d61a70214d".
The "bad" changeset has the timestamp "20150312161054" and the hash "9083621b0e2e".

Likely regression window: https://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=69d61a70214d&tochange=9083621b0e2e
Flags: needinfo?(bhackett1024)
Attached patch patchSplinter Review
loadUnboxedProperty should support loading an int32 property into a double register.
Assignee: nobody → bhackett1024
Flags: needinfo?(bhackett1024)
Attachment #8589060 - Flags: review?(jdemooij)
Comment on attachment 8589060 [details] [diff] [review]
patch

Review of attachment 8589060 [details] [diff] [review]:
-----------------------------------------------------------------

::: js/src/jit/MacroAssembler.cpp
@@ +807,5 @@
> +              push(scratch);
> +              load32(address, scratch);
> +              convertInt32ToDouble(scratch, output.typedReg().fpu());
> +              pop(scratch);
> +              break;

I think we can do:

convertInt32ToDouble(address, output.typedReg().fpu());
break;
Attachment #8589060 - Flags: review?(jdemooij) → review+
Nice, done, though I had to add convertInt32ToDouble(BaseIndex, FloatRegister) methods for x86/x64/ARM.  I left MIPS alone because I didn't know how to implement it for that architecture and because the MIPS build is already busted anyways.

https://hg.mozilla.org/integration/mozilla-inbound/rev/678f89d62b39
https://hg.mozilla.org/mozilla-central/rev/678f89d62b39
Status: NEW → RESOLVED
Closed: 6 years ago
Flags: in-testsuite+
Resolution: --- → FIXED
Target Milestone: --- → mozilla40
You need to log in before you can comment on or make changes to this bug.