// Copyright 2018 the V8 project authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Flags: --allow-natives-syntax | |
function assert(cond) { | |
if (!cond) throw 'Assert'; | |
} | |
function Constructor() { | |
this.padding1 = null; | |
this.padding2 = null; | |
this.padding3 = null; | |
this.padding4 = null; | |
this.padding5 = null; | |
this.padding6 = null; | |
this.padding7 = null; | |
this.padding8 = null; | |
this.padding9 = null; | |
this.padding10 = null; | |
this.padding11 = null; | |
this.padding12 = null; | |
this.padding13 = null; | |
this.padding14 = null; | |
this.padding15 = null; | |
this.padding16 = null; | |
this.padding17 = null; | |
this.padding18 = null; | |
this.padding19 = null; | |
this.padding20 = null; | |
this.padding21 = null; | |
this.padding22 = null; | |
this.padding23 = null; | |
this.padding24 = null; | |
this.padding25 = null; | |
this.padding26 = null; | |
this.padding27 = null; | |
this.padding28 = null; | |
this.padding29 = null; | |
this.array = null; | |
this.accumulator = 0; | |
} | |
function f(k) { | |
var c = k.accumulator | 0; | |
k.accumulator = k.array[k.accumulator + 1 | 0] | 0; | |
k.array[c + 1 | 0] = -1; | |
var head = k.accumulator; | |
assert(head + c & 1); | |
while (head >= 0) { | |
head = k.array[head + 1 | 0]; | |
} | |
return; | |
}; | |
%PrepareFunctionForOptimization(f); | |
const tmp = new Constructor(); | |
tmp.array = new Int32Array(5); | |
for (var i = 1; i < 5; i++) tmp.array[i] = i | 0; | |
tmp.accumulator = 0; | |
f(tmp); | |
f(tmp); | |
%OptimizeFunctionOnNextCall(f); | |
f(tmp); // This must not trigger the {assert}. |