Bug 1241886: Fix debug assertion if we're in dead code; r?luke
--- 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);