blob: fb4c4d15895ab742d097ac7f7364f96bafdfa567 [file] [log] [blame]
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// VMOptions=--optimization_counter_threshold=10 --no-background-compilation --shared-slow-path-triggers-gc
// VMOptions=--optimization_counter_threshold=10 --no-background-compilation --shared-slow-path-triggers-gc --no-use-vfp
// This tests the stackmaps and environments for safepoints corresponding to
// slow-path code which uses shared runtime stubs.
import 'package:expect/expect.dart';
import 'dart:math';
class C {
C? talk(C? _) => _;
}
int getPositiveNum() {
return (new DateTime.now()).millisecondsSinceEpoch;
}
C? getC() {
if (getPositiveNum() == 0) {
return new C();
} else {
return null;
}
}
int global = 0;
int getNum() {
return global++;
}
test0(int k) {
var x = getC();
var y = getNum();
try {
y = getNum();
x = getC();
x!.talk(x)!.talk(x);
y = getNum();
} catch (e) {
Expect.equals(x, null);
Expect.equals(y, k);
}
}
test1(int k) {
var x = getC();
var y = getNum();
double z = getPositiveNum().toDouble();
while (z > 1) {
z = sqrt(z - 0.1);
}
try {
y = getNum();
x = getC();
z = z.ceil().toDouble();
var k = z / 2;
x!.talk(x)!.talk(x);
z = k / 2;
y = getNum();
} catch (e) {
Expect.equals(x, null);
Expect.equals(y, k);
Expect.equals(z, 1);
}
}
main() {
global = 1;
for (int i = 0; i < 100; ++i) {
test0(2 * (i + 1));
}
global = 1;
for (int i = 0; i < 100; ++i) {
test1(2 * (i + 1));
}
}