// Copyright (c) 2016, 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. // // Test that 'StaticCall's against "super" go through the unchecked entrypoint. import "common.dart"; import "package:expect/expect.dart"; class C { @AlwaysInline @NeverInline @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate) void target1(T x) { Expect.notEquals(x, -1); } } class D extends C { @NeverInline void target1(T x) { super.target1(x); } } class E extends C { @NeverInline void target1(T x) { super.target1(x); } } int j = 0; C getC() { if (j % 2 == 0) { ++j; return new D(); } else if (j % 2 == 1) { ++j; return new E(); } else { return new C(); } } test(List args) { // Make sure the check on target1.x is not completely eliminated. if (args.length > 0) { (C() as C).target1(1.0); } const int iterations = benchmarkMode ? 200000000 : 100; for (int i = 0; i < iterations; ++i) { getC().target1(i); } entryPoint.expectUnchecked(iterations); }