blob: b6b6c790a559c7a4778840f9c8af3489031c10e4 [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.
// Regression test for https://dartbug.com/54871.
import 'dart:_internal';
import 'dart:ffi';
import 'package:expect/config.dart';
const address = 0xaabbccdd;
bool deoptimize = false;
main() {
// This test will cause deoptimizations (via helper in `dart:_internal`) and
// does therefore not run in AOT.
if (isVmAotConfiguration) return;
for (int i = 0; i < 100000; ++i) {
foo();
}
deoptimize = true;
foo();
}
@pragma('vm:never-inline')
void foo() {
final pointer = Pointer<Void>.fromAddress(address);
useInteger(pointer.address);
final pointerAddress = pointer.address;
if (address != pointerAddress) {
throw '$address vs $pointerAddress';
}
}
@pragma('vm:never-inline')
void useInteger(int address) {
if (deoptimize) {
VMInternalsForTesting.deoptimizeFunctionsOnStack();
}
}