diff --git a/pkg/compiler/test/inference/data/late_field.dart b/pkg/compiler/test/inference/data/late_field.dart new file mode 100644 index 00000000000..678b890e174 --- /dev/null +++ b/pkg/compiler/test/inference/data/late_field.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2022, 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. + +import 'package:compiler/src/util/testing.dart'; + +/*member: Foo.:[exact=Foo]*/ +class Foo { + /*member: Foo._#Foo#x:[sentinel|exact=JSUInt31]*/ + /*member: Foo.x:[exact=JSUInt31]*/ + late int /*[exact=Foo]*/ /*update: [exact=Foo]*/ x = 42; +} + +/*member: main:[null]*/ +void main() { + makeLive(test(Foo())); +} + +@pragma('dart2js:noInline') +/*member: test:[exact=JSUInt31]*/ +int test(Foo /*[exact=Foo]*/ foo) => foo. /*[exact=Foo]*/ x; diff --git a/tests/web/late_no_inlining_test.dart b/tests/web/late_no_inlining_test.dart new file mode 100644 index 00000000000..d6814f4b3e8 --- /dev/null +++ b/tests/web/late_no_inlining_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2022, 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. + +// dart2jsOptions=--disable-inlining + +import 'package:expect/expect.dart'; + +// Tests to ensure that narrowing type information does not discard late +// sentinel values unintentionally. + +class Foo { + late int bar = 42; + late final int baz = 1729; +} + +void main() { + final foo = Foo(); + Expect.equals(42, foo.bar); + Expect.equals(1729, foo.baz); +}