Closed Bug 1477084 Opened 6 years ago Closed 6 years ago

Assertion failure: generatorVal.isObject(), at js/src/vm/AsyncIteration.cpp:285 with Debugger

Categories

(Core :: JavaScript Engine, defect, P1)

x86_64
Linux
defect

Tracking

()

RESOLVED FIXED
mozilla68
Tracking Status
firefox-esr60 --- unaffected
firefox63 --- wontfix
firefox64 --- wontfix
firefox65 --- wontfix
firefox66 --- wontfix
firefox67 --- wontfix
firefox68 --- fixed

People

(Reporter: decoder, Assigned: jorendorff)

References

(Regression)

Details

(4 keywords, Whiteboard: [jsbugmon:testComment=14,origRev=8ec327de0ba7])

Attachments

(1 file)

The following testcase crashes on mozilla-central revision 183ee39bf309 (build with --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --disable-tests --disable-profiling --enable-debug --enable-optimize, run with --fuzzing-safe --no-threads): g = newGlobal(); g.parent = this; g.eval(` Debugger(parent).onExceptionUnwind = function(frame) { return frame.eval(""); } `); var obj = { async *method({ x: callbackfn = unresolvableReference }) {} }; obj.method().next().then(() => {}).each ($DONE, $DONE); Backtrace: received signal SIGSEGV, Segmentation fault. 0x0000000000b03588 in js::AsyncGeneratorObject::create (cx=0x7ffff5f17000, asyncGen=asyncGen@entry=..., generatorVal=generatorVal@entry=...) at js/src/vm/AsyncIteration.cpp:285 #0 0x0000000000b03588 in js::AsyncGeneratorObject::create (cx=0x7ffff5f17000, asyncGen=asyncGen@entry=..., generatorVal=generatorVal@entry=...) at js/src/vm/AsyncIteration.cpp:285 #1 0x0000000000b056e7 in WrappedAsyncGenerator (cx=<optimized out>, argc=<optimized out>, vp=<optimized out>) at js/src/vm/AsyncIteration.cpp:48 #2 0x00000000005bfe13 in CallJSNative (cx=0x7ffff5f17000, native=0xb05380 <WrappedAsyncGenerator(JSContext*, unsigned int, JS::Value*)>, args=...) at js/src/vm/Interpreter.cpp:444 [...] #16 main (argc=<optimized out>, argv=<optimized out>, envp=<optimized out>) at js/src/shell/js.cpp:9464 rax 0x0 0 rbx 0x7ffff5f17000 140737319628800 rcx 0x7ffff6c282ad 140737333330605 rdx 0x0 0 rsi 0x7ffff6ef7770 140737336276848 rdi 0x7ffff6ef6540 140737336272192 rbp 0x7fffffffc7f0 140737488340976 rsp 0x7fffffffc740 140737488340800 r8 0x7ffff6ef7770 140737336276848 r9 0x7ffff7fe4780 140737354024832 r10 0x58 88 r11 0x7ffff6b9e7a0 140737332766624 r12 0x1 1 r13 0x7fffffffc860 140737488341088 r14 0x7fffffffc870 140737488341104 r15 0x7fffffffc830 140737488341040 rip 0xb03588 <js::AsyncGeneratorObject::create(JSContext*, JS::Handle<JSFunction*>, JS::Handle<JS::Value>)+936> => 0xb03588 <js::AsyncGeneratorObject::create(JSContext*, JS::Handle<JSFunction*>, JS::Handle<JS::Value>)+936>: movl $0x0,0x0 0xb03593 <js::AsyncGeneratorObject::create(JSContext*, JS::Handle<JSFunction*>, JS::Handle<JS::Value>)+947>: ud2
Maybe from the generator/debugger changes (not sure if they landed tho).
Flags: needinfo?(jorendorff)
Whiteboard: [jsbugmon:update,bisect] → [jsbugmon:update]
JSBugMon: Bisection requested, result: autoBisect shows this is probably related to the following changeset: The first bad revision is: changeset: https://hg.mozilla.org/mozilla-central/rev/09d4547a9714 user: Jason Orendorff date: Fri Jul 06 18:09:05 2018 -0500 summary: Bug 1471954 - Change behavior of `{return:}` resumption values in generators. r=jimb This iteration took 282.726 seconds to run.
Jason, do you plan to work on this for 63? Thanks
No; I want to fix this, but it doesn't qualify for backporting. This can only happen with the use of a Debugger API feature that isn't exposed to content and also, IIUC, isn't used by any existing Firefox DevTools code.
Flags: needinfo?(jorendorff)
Priority: -- → P1
Thanks Jason, marking as wontfix for 63 then.
Flags: needinfo?(jorendorff)
Flags: needinfo?(jorendorff)
Flags: needinfo?(jorendorff)
Going to try to investigate this with jimb later today.
I have a partial patch for this. Ran out of time today; need to finish it up Monday.
Flags: needinfo?(jorendorff)
Flags: needinfo?(jorendorff)
Pushed by jorendorff@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/227f1a73b16f Fix assertion with Debugger forcing return from an async generator before its initial yield. r=jimb
Backed out for spidermonkey bustages on tests/debug/Frame-onStep-generator-resumption-01.js Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&resultStatus=testfailed%2Cbusted%2Cexception&fromchange=227f1a73b16fba34216e1fb408eca5aeefcf8497&tochange=1e6d3675ae4eaac986ecf27f76b5d2a4cf78b7b7&searchStr=spidermonkey&selectedJob=220001095 Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=220001095&repo=autoland&lineNumber=46359 Backout link: https://hg.mozilla.org/integration/autoland/rev/1e6d3675ae4eaac986ecf27f76b5d2a4cf78b7b7 [task 2019-01-04T16:51:13.647Z] Exit code: 3 [task 2019-01-04T16:51:13.647Z] FAIL - debug/Frame-onStep-generator-resumption-01.js [task 2019-01-04T16:51:13.647Z] TEST-UNEXPECTED-FAIL | js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js | /builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js line 4 > eval:2:1 TypeError: can't force return from a generator or async function before the initial yield (code 3, args "--ion-eager --ion-offthread-compile=off --ion-check-range-analysis --ion-extra-checks --no-sse3 --no-threads") [0.0 s] [task 2019-01-04T16:51:13.647Z] {"action": "test_start", "jitflags": "--ion-eager --ion-offthread-compile=off --ion-check-range-analysis --ion-extra-checks --no-sse3 --no-threads", "pid": 29106, "source": "jittests", "test": "debug/Frame-onStep-generator-resumption-01.js", "thread": "main", "time": 1546620673.608839} [task 2019-01-04T16:51:13.647Z] {"action": "test_end", "extra": {"jitflags": "--ion-eager --ion-offthread-compile=off --ion-check-range-analysis --ion-extra-checks --no-sse3 --no-threads", "pid": 29106}, "jitflags": "--ion-eager --ion-offthread-compile=off --ion-check-range-analysis --ion-extra-checks --no-sse3 --no-threads", "message": "/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js line 4 > eval:2:1 TypeError: can't force return from a generator or async function before the initial yield", "pid": 29106, "source": "jittests", "status": "FAIL", "test": "debug/Frame-onStep-generator-resumption-01.js", "thread": "main", "time": 1546620673.646848} [task 2019-01-04T16:51:13.647Z] INFO exit-status : 3 [task 2019-01-04T16:51:13.647Z] INFO timed-out : False [task 2019-01-04T16:51:13.647Z] INFO stderr 2> /builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js line 4 > eval:2:1 TypeError: can't force return from a generator or async function before the initial yield [task 2019-01-04T16:51:13.648Z] INFO stderr 2> Stack: [task 2019-01-04T16:51:13.648Z] INFO stderr 2> f@/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js line 4 > eval:2:1 [task 2019-01-04T16:51:13.648Z] INFO stderr 2> test@/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js:32:18 [task 2019-01-04T16:51:13.648Z] INFO stderr 2> @/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js:42:20 [task 2019-01-04T16:51:13.648Z] /builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js line 4 > eval:2:1 TypeError: can't force return from a generator or async function before the initial yield [task 2019-01-04T16:51:13.648Z] Stack: [task 2019-01-04T16:51:13.648Z] f@/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js line 4 > eval:2:1 [task 2019-01-04T16:51:13.648Z] test@/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js:32:18 [task 2019-01-04T16:51:13.648Z] @/builds/worker/workspace/build/src/js/src/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js:42:20 [task 2019-01-04T16:51:13.648Z] Exit code: 3 [task 2019-01-04T16:51:13.648Z] FAIL - debug/Frame-onStep-generator-resumption-01.js
There are also jitttest failures on tests/jit-test/jit-test/tests/debug/Frame-onStep-generator-resumption-01.js https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=220017116&repo=autoland&lineNumber=42785

Here's one way the new code can go wrong:

  1. We fire the onStep hook before the initial yield for a generator.

  2. It returns {return: "banana"}.

  3. CheckResumptionValue is called, it closes the generator and throws an error, because this isn't supported anymore.

  4. BUT then the unhandledExceptionHook fires, and it returns undefined.

  5. Now we continue running the debuggee. But we already closed that generator object, screwing up the state machine.
    It asserts later.

Whiteboard: [jsbugmon:update] → [jsbugmon:update,ignore]
g = newGlobal();
g.parent = this;
g.eval(`
  Debugger(parent).onExceptionUnwind = function(frame) {
    return frame.eval("");
  }
`);
var obj = {
  async *method({ x: callbackfn = unresolvableReference }) {}
};
obj.method().next().then(() => {}).each ($DONE, $DONE);

asserts js shell compiled with --enable-debug on m-c rev 8ec327de0ba7 using --fuzzing-safe --no-threads --no-baseline --no-ion --more-compartments at Assertion failure: generatorVal.isObject(), at js/src/vm/AsyncIteration.cpp:273

Whiteboard: [jsbugmon:update,ignore] → [jsbugmon:update,testComment=14,origRev=8ec327de0ba7]
Whiteboard: [jsbugmon:update,testComment=14,origRev=8ec327de0ba7] → [jsbugmon:testComment=14,origRev=8ec327de0ba7]
JSBugMon: Cannot process bug: Unable to automatically reproduce, please track manually.

There's a r+ patch which didn't land and no activity in this bug for 2 weeks.
:jorendorff, could you have a look please?

Flags: needinfo?(jorendorff)

This time for sure.

Flags: needinfo?(jorendorff)
Pushed by jorendorff@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/277725a3d886 Fix assertion with Debugger forcing return from an async generator before its initial yield. r=jimb
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla68
Assignee: nobody → jorendorff
Flags: in-testsuite+
Regressed by: 1471954
Has Regression Range: --- → yes
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: