Bug 1241886: Fix debug assertion if we're in dead code; r?luke draft
authorBenjamin Bouvier <benj@benj.me>
Fri, 22 Jan 2016 15:46:47 +0100
changeset 324333 a59befb97f314a4c8d861c2e7b94d7bdcc73aa2a
parent 323964 9809139812ebe073b84d0fa12705062b1b50845b
child 513362 1285f9d44720334c987d3c7b0fc21c1894876e97
push id9885
push userbenj@benj.me
push dateFri, 22 Jan 2016 14:47:01 +0000
reviewersluke
bugs1241886
milestone46.0a1
Bug 1241886: Fix debug assertion if we're in dead code; r?luke
js/src/asmjs/WasmIonCompile.cpp
js/src/jit-test/tests/asm.js/testExpressions.js
--- a/js/src/asmjs/WasmIonCompile.cpp
+++ b/js/src/asmjs/WasmIonCompile.cpp
@@ -2087,17 +2087,17 @@ EmitTernary(FunctionCompiler& f, MaybeTy
     if (!EmitExpr(f, type, &ifFalse))
         return false;
 
     f.pushPhiInput(ifFalse);
 
     if (!f.joinIfElse(thenBlocks))
         return false;
 
-    MOZ_ASSERT(ifTrue->type() == ifFalse->type(), "both sides of a ternary have the same type");
+    MOZ_ASSERT_IF(ifTrue && ifFalse, ifTrue->type() == ifFalse->type());
 
     *def = f.popPhiOutput();
     return true;
 }
 
 static bool
 EmitMultiply(FunctionCompiler& f, ExprType type, MDefinition** def)
 {
--- a/js/src/jit-test/tests/asm.js/testExpressions.js
+++ b/js/src/jit-test/tests/asm.js/testExpressions.js
@@ -254,16 +254,17 @@ assertEq(f(INT32_MIN, UINT32_MAX), INT32
 assertEq(f(INT32_MIN, INT32_MIN), 0);
 
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (4 / 2)|0 } return f"))(), 2);
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (3 / 2)|0 } return f"))(), 1);
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (4 % 2)|0 } return f"))(), 0);
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (3 % 2)|0 } return f"))(), 1);
 
 assertAsmTypeFail(USE_ASM + "function f() { var i=42,j=1.1; return +(i?i:j) } return f");
+assertEq(asmLink(asmCompile(USE_ASM + "function f() { return 0; 1 ? 1 : 1; return 0; } return f"))(), 0);
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { var i=42,j=1.1; return +(i?+(i|0):j) } return f"))(), 42);
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { var i=42,j=1; return (i?i:j)|0 } return f"))(), 42);
 
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (0 > (-(~~1) >>> 0)) | 0; } return f"))(), 0);
 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return 0 < 4294967294 | 0; } return f"))(), 1);
 
 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return ((i|0)>(j|0)?(i+10)|0:(j+100)|0)|0 } return f"));
 assertEq(f(2, 4), 104);