blob: 0d3d1f74270f307fad93575f872003a92d091e8e [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.7
// Regression test for https://github.com/dart-lang/sdk/issues/39747.
// Verifies that compiler doesn't crash on a particular piece of code.
import "package:expect/expect.dart";
double foo4() {}
var par1 = 1.0.toStringAsPrecision(12);
void doTest() {
for (int i = 0; i < 10; ++i) {
// foo4() returns constant null.
// foo4().toStringAsPrecision(-37) is a PolymorphicInstanceCall with
// a single target _Double.toStringAsPrecision.
// Type propagation narrows down receiver type and assigns type _Double to
// subsequent uses of null constant.
(foo4().toStringAsPrecision(-37));
// Add a Phi which uses double constant and null.
// Unboxed representation is selected for this Phi, causing
// Unbox instruction for null constant which can deoptimize.
(par1 != null ? 11.11 : foo4());
}
}
main() {
Expect.throws(() => doTest());
}