blob: 2b5a0e01d8b56d51f77e9a32fc75bfa9d0286f2d [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.
// Checks that we no longer expose unsafe untagged pointers for internal
// typed data objects in this trimmed example found by the Dart fuzzer.
import 'dart:typed_data';
import 'package:vm/testing/il_matchers.dart';
@pragma('vm:never-inline')
@pragma('vm:testing:print-flow-graph')
Uint32List create() => Uint32List.fromList(Uint32List.fromList(Uint8List(40)));
void main() async {
print(create());
}
void matchIL$create(FlowGraph graph) {
graph.dump();
graph.match([
match.block('Graph', [
'c40' << match.Constant(value: 40),
'c0' << match.Constant(value: 0),
]),
match.block('Function', [
// Only here to avoid inner32Alloc matching the first AllocateTypedData.
'initial8Alloc' << match.AllocateTypedData('c40'),
'inner32Alloc' << match.AllocateTypedData('c40'),
'outer32Alloc' << match.AllocateTypedData('c40'),
match.MemoryCopy('inner32Alloc', 'outer32Alloc', 'c0', 'c0', match.any),
]),
]);
}