// 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.
//
// VMOptions=--deterministic --optimization-counter-threshold=10 --unbox-numeric-fields

// @dart = 2.9

import 'package:expect/expect.dart';

const magicDouble = 42.0;

class C {
  double d = magicDouble;
}

class NoopSink {
  void leak(C c) {}
}

class RealSink {
  static C o;
  void leak(C c) {
    o = c;
  }
}

void foo(sink) {
  sink.leak(C());
}

void main(List<String> args) {
  var c = C();
  for (var i = 0; i < 100; i++) c.d = 2.0;

  for (var i = 0; i < 100; i++) {
    foo(NoopSink());
  }

  foo(RealSink());
  RealSink.o.d += 1234.0;
  final TWO = args.length > 1024 ? "~" : 2;
  Expect.equals(double.parse("4${TWO}.0"), magicDouble);
}
