Closed Bug 1254172 Opened 8 years ago Closed 8 years ago

Assertion failure: !unknownProperties(), at js/src/vm/TypeInference-inl.h:1043 with OOM

Categories

(Core :: JavaScript Engine, defect)

x86_64
Linux
defect
Not set
critical

Tracking

()

RESOLVED FIXED
mozilla49
Tracking Status
firefox47 --- wontfix
firefox48 --- ?
firefox49 --- fixed

People

(Reporter: decoder, Assigned: efaust)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, regression, testcase, Whiteboard: [jsbugmon:update,ignore])

Attachments

(1 file)

The following testcase crashes on mozilla-central revision b6acf4d4fc20 (build with --enable-optimize --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --disable-tests --enable-debug, run with --fuzzing-safe --thread-count=2 --ion-extra-checks --ion-check-range-analysis):

var lfcode = new Array();
var lfRunTypeId = -1;
lfcode.push("");
lfcode.push("");
lfcode.push("3");
lfcode.push(`
oomTest(function() {
    eval(\`var [r, g, b] = [1, 1, 1];
         wm.set({}, 'FOO').get(log, 'watcher');\`);
});
`);
while (true) {
  var file = lfcode.shift(); if (file == undefined) { break; }
  loadFile(file);
}
function loadFile(lfVarx) {
  switch (lfRunTypeId) {
    case 1: eval(lfVarx); 
    default: evaluate(lfVarx); 
  }
}



Backtrace:

Program received signal SIGSEGV, Segmentation fault.
0x000000000062ae10 in js::ObjectGroup::maybeGetProperty (this=0x7ffff7e66a30, id=...) at js/src/vm/TypeInference-inl.h:1043
#0  0x000000000062ae10 in js::ObjectGroup::maybeGetProperty (this=0x7ffff7e66a30, id=...) at js/src/vm/TypeInference-inl.h:1043
#1  0x0000000000bc37c6 in PropagatePropertyTypes (cx=cx@entry=0x7ffff6907800, id=..., id@entry=..., oldGroup=oldGroup@entry=0x7ffff7e66a30, newGroup=newGroup@entry=0x7ffff7e66c40) at js/src/vm/UnboxedObject.cpp:387
#2  0x0000000000bc714f in js::UnboxedLayout::makeNativeGroup (cx=cx@entry=0x7ffff6907800, group=0x7ffff7e66a30) at js/src/vm/UnboxedObject.cpp:530
#3  0x0000000000bcdf01 in js::UnboxedPlainObject::convertToNative (cx=cx@entry=0x7ffff6907800, obj=0x7ffff4801640) at js/src/vm/UnboxedObject.cpp:561
#4  0x0000000000bce41b in js::UnboxedPlainObject::obj_setProperty (cx=0x7ffff6907800, obj=..., id=..., v=..., receiver=..., result=...) at js/src/vm/UnboxedObject.cpp:831
#5  0x0000000000932d46 in JSObject::nonNativeSetProperty (cx=cx@entry=0x7ffff6907800, obj=..., id=..., v=..., receiver=..., result=...) at js/src/jsobj.cpp:1046
#6  0x00000000006282d8 in js::SetProperty (cx=cx@entry=0x7ffff6907800, obj=..., obj@entry=..., id=..., id@entry=..., v=..., receiver=..., receiver@entry=..., result=...) at js/src/vm/NativeObject.h:1491
#7  0x00000000006206aa in PutProperty (strict=false, v=..., id=..., obj=..., cx=0x7ffff6907800) at js/src/jsobj.h:934
#8  InitPropertyOperation (rhs=..., id=..., obj=..., op=<optimized out>, cx=0x7ffff6907800) at js/src/vm/Interpreter-inl.h:343
#9  js::jit::DoSetPropFallback (cx=0x7ffff6907800, frame=<optimized out>, stub_=<optimized out>, lhs=..., rhs=..., res=...) at js/src/jit/BaselineIC.cpp:4687
#10 0x00007ffff7ff1c2f in ?? ()
[...]
#43 0x0000000000000000 in ?? ()
rax	0x0	0
rbx	0x7ffff7e66a30	140737352460848
rcx	0x7ffff6ca588d	140737333844109
rdx	0x0	0
rsi	0x7ffff6f7a9d0	140737336814032
rdi	0x7ffff6f791c0	140737336807872
rbp	0x7fffffff97a0	140737488328608
rsp	0x7fffffff9770	140737488328560
r8	0x7ffff7fdf7c0	140737354004416
r9	0x6372732f736a2f6c	7165916604736876396
r10	0x7fffffff9530	140737488327984
r11	0x7ffff6c27ee0	140737333329632
r12	0x7ffff7e1cf58	140737352159064
r13	0x27ff0001	671023105
r14	0x7fffffff97e0	140737488328672
r15	0x7ffff7e1cf58	140737352159064
rip	0x62ae10 <js::ObjectGroup::maybeGetProperty(jsid)+880>
=> 0x62ae10 <js::ObjectGroup::maybeGetProperty(jsid)+880>:	movl   $0x413,0x0
   0x62ae1b <js::ObjectGroup::maybeGetProperty(jsid)+891>:	callq  0x4a6f30 <abort()>
Whiteboard: [jsbugmon:update,bisect] → [jsbugmon:update]
JSBugMon: Bisection requested, result:
=== Treeherder Build Bisection Results by autoBisect ===

The "good" changeset has the timestamp "20160212031715" and the hash "c1e09305f827211d32ff6a7d54be608d52710232".
The "bad" changeset has the timestamp "20160212041815" and the hash "966f47ed2f25eb54fb1f967d4443b3c2b8b63220".

Likely regression window: https://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=c1e09305f827211d32ff6a7d54be608d52710232&tochange=966f47ed2f25eb54fb1f967d4443b3c2b8b63220
Guessing the regression window isn't accurate due to intermittent OOM.
autoBisect shows this is probably related to the following changeset:

The first bad revision is:
changeset:   https://hg.mozilla.org/mozilla-central/rev/966f47ed2f25
user:        Joel Maher
date:        Fri Feb 12 04:11:10 2016 -0800
summary:     backout Bug 1221144 for perf regression

autoBisect keeps pointing to the backout of a patch of bug 1221144, so setting needinfo? from Jason who wrote the patches for bug 1221144.
Flags: needinfo?(jorendorff)
I don't think I will be re-landing the patches that bounced in bug 1221144. They lost on speed and memory usage, and I don't think it's easily fixed.

So I will have to look at this for real.
Assignee: nobody → jorendorff
Flags: needinfo?(jorendorff)
Whiteboard: [jsbugmon:update] → [jsbugmon:update,ignore]
JSBugMon: The testcase found in this bug no longer reproduces (tried revision afd82f887093).
I also cannot reproduce this.
Whiteboard: [jsbugmon:update,ignore] → [jsbugmon:update,bisectfix]
Whiteboard: [jsbugmon:update,bisectfix] → [jsbugmon:update,ignore]
JSBugMon: The testcase found in this bug no longer reproduces (tried revision 2b7c421063ad).
JSBugMon: Fix Bisection requested, result:
autoBisect shows this is probably related to the following changeset:

The first good revision is:
changeset:   https://hg.mozilla.org/mozilla-central/rev/f88bfa306282
user:        Greg Weng
date:        Tue Apr 12 18:29:00 2016 +0200
summary:     Bug 1198701 - ArrayIterator gets length property after iteration has finished. r=till

This iteration took 0.530 seconds to run.
Attached patch FixSplinter Review
OK, so, the "fix" bisected to above is just because we perturbed the self-hosted code that was tickling this assert in TI, but the potential remains.

Fix UnboxedLayout::makeNativeGroup to be robust in the face of the unboxed group having unknownProperties.
Assignee: jorendorff → efaustbmo
Status: NEW → ASSIGNED
Attachment #8748102 - Flags: review?(jdemooij)
Comment on attachment 8748102 [details] [diff] [review]
Fix

Review of attachment 8748102 [details] [diff] [review]:
-----------------------------------------------------------------

Makes sense, thanks for fixing.
Attachment #8748102 - Flags: review?(jdemooij) → review+
https://hg.mozilla.org/mozilla-central/rev/a1c29f2e7e32
Status: ASSIGNED → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla49
Looks like 48 would also be affected. Is this worth uplifting to 48 aurora? 
If not, let's go ahead and wontfix for 48 as well as for 47 (as it is getting late for beta uplifts)
Flags: needinfo?(efaustbmo)
Normally I would say 'no', because this is just an OOM bug, but this one is slightly more insidious. Jan, what do you think?
Flags: needinfo?(efaustbmo) → needinfo?(jdemooij)
(In reply to Eric Faust [:efaust] from comment #13)
> Normally I would say 'no', because this is just an OOM bug, but this one is
> slightly more insidious. Jan, what do you think?

I agree it's not urgent, but an OOM here doesn't seem entirely impossible and it's a safe patch..
Flags: needinfo?(jdemooij)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: