Closed Bug 1698609 Opened 4 years ago Closed 4 years ago

WrapOracle.cpp MOZ_ASSERT_IF(hash == oldHash, cx_->hadNondeterministicException());

Categories

(Core :: JavaScript Engine: JIT, defect, P1)

defect

Tracking

()

RESOLVED FIXED
89 Branch
Tracking Status
firefox89 --- fixed

People

(Reporter: bryce, Assigned: iain)

References

Details

Crash Data

Attachments

(1 file)

I've been reliably hitting https://searchfox.org/mozilla-central/rev/a848cde8a73065fcc41902ac58c65821eb9a44ca/js/src/jit/WarpOracle.cpp#188 while trying to debug a media issue. I'm not sure what prompted the problem, as it wasn't a permafail initially, but now is.

After playing the video on https://www.groovehq.com/watch-demo for ~2 seconds I trigger the assert on a local build built from cenrtral bd8121e747b5 (March 11).

Commenting out the asserting code then triggers https://searchfox.org/mozilla-central/rev/a848cde8a73065fcc41902ac58c65821eb9a44ca/js/src/jit/JitScript.h#496 which makes it difficult to mitigate the issue in my debug builds.

This is Iain's code; it's trying to catch potential performance issues, but we should have a flag (--disable-bailout-loop-checking or somesuch) to disable this for people like Bryce who can't action the resulting failure.

Flags: needinfo?(iireland)

The shell flag is --disable-bailout-loop-check. I'm not sure that there's an easy way to set it in the browser, but if you're looking for the easiest fix in your local build, changing false to true here should do the trick.

In the meantime, I'll try to figure out the underlying problem.

Flags: needinfo?(iireland)

oops; I totally meant pref vs. flag!

(In reply to Iain Ireland [:iain] from comment #3)

The shell flag is --disable-bailout-loop-check. I'm not sure that there's an easy way to set it in the browser, but if you're looking for the easiest fix in your local build, changing false to true here should do the trick.

In the meantime, I'll try to figure out the underlying problem.

Thanks! Appreciate the work around.

If we parse offthread, then the shape of the template object will be allocated in a separate zone with a different initialShapes set. CodeGenerator::visitRegExp will create a new regexp using the shape of the template object. To remain consistent and avoid failed shape guards / bailout loops, we should do the same in CloneRegExpObject.

I played around with offThreadCompileScript and friends for a while trying to replicate the problem in the shell, but I couldn't get a testcase to work. This fixes the browser issue, though.

Assignee: nobody → iireland
Status: NEW → ASSIGNED
Severity: -- → S3
Priority: -- → P1
Pushed by iireland@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/70bc9f02feee Use shape from template object when cloning RegExp r=tcampbell
Status: ASSIGNED → RESOLVED
Closed: 4 years ago
Resolution: --- → FIXED
Target Milestone: --- → 89 Branch
Crash Signature: [@ js::jit::WarpOracle::createSnapshot()]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: