// 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.9

// Verify that LoadStaticField IL instruction can't be hoisted above
// InitStaticField instruction.

import 'package:expect/expect.dart';

// Classes used to trigger deoptimization when running from app-jit snapshot.
class A {
  void foo() {}
}

class B {
  void foo() {}
}

// Static final field with a non-trivial initializer.
// This field will be reset before snapshot is written.
final field = (() => 'value')();

dynamic bar(dynamic o, {bool loadField: false}) {
  o.foo();
  // Create loop to trigger loop invariant code motion. We are testing that
  // field load can't be hoisted above field initialization.
  for (var i = 0; i < 2; i++) {
    final v = loadField ? field : null;
    if (loadField) {
      return v;
    }
  }
  return null;
}

void main(List<String> args) {
  final isTraining = args.contains("--train");
  dynamic o = isTraining ? new A() : new B();
  for (var i = 0; i < 20000; i++) {
    bar(o, loadField: false);
    if (isTraining) {
      // Initialize the field when training.
      bar(o, loadField: true);
    }
  }
  Expect.equals('value', bar(o, loadField: true));
  print(isTraining ? 'OK(Trained)' : 'OK(Run)');
}
