diff --git a/js/src/ion/AsmJSLink.cpp b/js/src/ion/AsmJSLink.cpp index c591ef79184e..56762702b2c3 100644 --- a/js/src/ion/AsmJSLink.cpp +++ b/js/src/ion/AsmJSLink.cpp @@ -395,20 +395,15 @@ HandleDynamicLinkFailure(JSContext *cx, CallArgs args, AsmJSModule &module, Hand // Call the function we just recompiled. unsigned argc = args.length(); - JS_ASSERT(argc <= 3); InvokeArgsGuard args2; - if (!cx->stack.pushInvokeArgs(cx, args.length(), &args2)) + if (!cx->stack.pushInvokeArgs(cx, argc, &args2)) return false; args2.setCallee(ObjectValue(*fun)); args2.setThis(args.thisv()); - if (argc > 0) - args2[0] = args[0]; - if (argc > 1) - args2[1] = args[1]; - if (argc > 2) - args2[2] = args[2]; + for (unsigned i = 0; i < argc; i++) + args2[i] = args[i]; if (!Invoke(cx, args2)) return false; diff --git a/js/src/jit-test/tests/asm.js/bug855526.js b/js/src/jit-test/tests/asm.js/bug855526.js new file mode 100644 index 000000000000..fd75b137d44f --- /dev/null +++ b/js/src/jit-test/tests/asm.js/bug855526.js @@ -0,0 +1,13 @@ +// Don't assert. +try { + eval('\ + function asmModule(g, foreign, heap) {\ + "use asm";\ + let HEAP8 = new g.Int8Array(heap);\ + function f() { return 17; } \ + return {f: f};\ + }\ + let m = asmModule("", "", 1, "");\ + '); +} catch (ex) { +}