blob: a0c3c1aa313381cf2691717d6b15d11ec09a9d4f [file] [log] [blame]
// Copyright (c) 2020, 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.
// @dart = 2.9
// VMOptions=--deterministic --optimization_counter_threshold=20
// Verifies that SSA construction doesn't crash when handling a Phi
// corresponding to an expression temp in case of OSR with non-empty
// expression stack.
// Regression test for https://github.com/dart-lang/sdk/issues/43682.
import 'package:expect/expect.dart';
class Foo {
List<Object> data;
Foo(this.data);
}
Map<String, Foo> foo(List<Object> objects) {
Map<String, Foo> map = {};
// OSR happens during '...objects' spread, and Foo instance is already
// allocated and remains on the stack during OSR.
// OSR Phi corresponding to that value is stored into 'foo' local and
// then loaded from it, but it doesn't correspond to 'foo' environment slot.
final foo = new Foo([...objects]);
map['hi'] = foo;
return map;
}
main() {
Expect.equals(30, foo(List.filled(30, Object()))['hi'].data.length);
}