blob: 1cb7d0b77023b804bf1f648bc3beea9612ba477c [file] [log] [blame]
// Copyright (c) 2024, 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.
// Test handling of MayThrow LoadStatic instructions in try-catch block.
import 'package:expect/expect.dart';
int x = 0;
int initialize_bar() {
if (x < 3) {
return x++;
} else {
throw "x $x is too big now!";
}
}
@pragma('vm:never-inline')
int foo(int y, int z) {
late int bar = initialize_bar();
int x = z + z;
int sum = y;
try {
print('24: x: $x sum: $sum');
sum += bar;
x = 123;
} catch (e) {
print(e);
sum += x;
print('30: x: $x sum: $sum');
}
if (x != 123) {
// Exception was thrown at "sum += bar"
Expect.equals(x + y, sum);
}
print('36: sum: $sum');
return sum;
}
main(List<String> args) {
Expect.equals(args.length * 2, foo(args.length * 2, -1));
Expect.equals(args.length * 4 + 1, foo(args.length * 4, -2));
Expect.equals(args.length * 8 + 2, foo(args.length * 8, -3));
Expect.equals(-4 * 2, foo(args.length * 16, -4));
}