blob: 01c651a71bc63f3cbeb9a59053f8291ed7c4e061 [file] [log] [blame]
// Copyright (c) 2018, 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.7
/*spec.class: A1:checkedInstance,checks=[],instance*/
/*prod.class: A1:checks=[],instance*/
class A1 {}
// Constructor calls are always statically invoked, so there is no checks at the
// entry and the `Test1` constructor does not cause any checks.
/*spec.class: B1:checks=[$isA1],instance*/
/*prod.class: B1:checks=[],instance*/
class B1 implements A1 {}
/*class: Test1:checks=[],instance*/
class Test1 {
A1 x;
/*class: A2:checks=[],instance*/
class A2 {}
// Constructor bodies are always statically resolved, so there is no checks at
// the entry and the `Test2` constructor body does not cause any checks.
/*class: B2:checks=[],instance*/
class B2 implements A2 {}
/*class: Test2:checks=[],indirectInstance*/
abstract class Test2 {
Test2(A2 x) {
/*class: Use:checks=[],instance*/
class Use extends Test2 {
Use.A2() : super(new A2());
Use.B2() : super(new B2());
main() {
new Test1(new A1());
new Test1(new B1());
new Test1(null);
new Use.A2();
new Use.B2();