Bug 1683614 - Post-barrier write to environment chain slot in Warp compiled suspend code r=iain

Differential Revision: https://phabricator.services.mozilla.com/D100798
This commit is contained in:
Matthew Gaudet 2021-01-05 18:21:56 +00:00
Родитель 13ad2a5fbe
Коммит 49874e65df
2 изменённых файлов: 17 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,14 @@
// |jit-test| --ion-offthread-compile=off; --ion-full-warmup-threshold=0; --warp-async; --baseline-eager;
//
// The following testcase crashes on mozilla-central revision 20201219-3262affdccf6 (debug build, run with --fuzzing-safe --ion-offthread-compile=off --ion-full-warmup-threshold=0 --warp-async --baseline-eager):
gczeal(9, 8);
function s() { }
new ReadableStream({
start() {
test();
}
});
async function test() {
for (let i17 = 1; i17 <= 30; i17++)
await s(0 + function () { return i17 });
}

Просмотреть файл

@ -2309,6 +2309,9 @@ bool WarpBuilder::buildSuspend(BytecodeLocation loc, MDefinition* gen,
alloc(), genObj, AbstractGeneratorObject::envChainSlot(),
current->environmentChain()));
current->add(
MPostWriteBarrier::New(alloc(), genObj, current->environmentChain()));
// GeneratorReturn will return from the method, however to support MIR
// generation isn't treated like the end of a block
MGeneratorReturn* ret = MGeneratorReturn::New(alloc(), retVal);