// Copyright (c) 2021, 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 for tree shaking of instance fields with initializers.

// @dart = 2.12

int sideEffect(int x) {
  print(x);
  return x;
}

class A {
  int f1 = sideEffect(1);
  int f2 = sideEffect(2);
  int f3 = 3;
  static int f4 = sideEffect(40); // Not evaluated in constructor.
  late int f5 = sideEffect(50); // Not evaluated in constructor.
  late final int f6 = sideEffect(60); // Not evaluated in constructor.
  int f7 = sideEffect(7); // Used/retained.
  int f8 = sideEffect(8);

  A(this.f8)
      : f1 = sideEffect(100),
        f2 = sideEffect(200);

  A.foo() : this(800);
  A.bar(this.f1) : f8 = sideEffect(801);
}

main() {
  // Use all constructors.
  A(-8);
  A.foo();
  A.bar(-1);

  // Use f4, f5, f6, f7.
  A obj = A.foo();
  print(A.f4 + obj.f5 + obj.f6 + obj.f7);
}
