// Copyright (c) 2017, the R8 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.
package inlining;

@NoHorizontalClassMerging
class InlineConstructor {

  int a;

  @CheckDiscarded
  InlineConstructor(int a) {
    this.a = a;
  }

  InlineConstructor(long a) {
    this((int) a);
  }

  InlineConstructor(int a, int loopy) {
    this.a = a;
    // Make this too big to inline.
    if (loopy > 10) {
      throw new RuntimeException("Too big!");
    }
    for (int i = 1; i < loopy; i++) {
      this.a = this.a * i;
    }
  }

  @CheckDiscarded
  InlineConstructor() {
    this(42, 9);
  }

  static InlineConstructor create() {
    return new InlineConstructor(10L);
  }

  static InlineConstructor createMore() {
    new InlineConstructor(0, 0);
    new InlineConstructor(0, 0);
    new InlineConstructor(0, 0);
    new InlineConstructor(0, 0);
    new InlineConstructor(0, 0);
    new InlineConstructor(0, 0);
    return new InlineConstructor();
  }
}
