// RUN: %target-swift-frontend -O -emit-sil %s | FileCheck %s

public class Base1 { @inline(never) func f() -> Int { return 0 } }

public class Base2: Base1 {
}

private class A: Base2 { }

private class B : A { 
    @inline(never) override func f() -> Int { return 1 }
}

private class C : A { 
    @inline(never) override func f() -> Int { return 2 }
}

@inline(never)
private func foo(_ a: A) -> Int {


// Check that a.f() call can be devirtualized, even
// though f is defined by one of the A's superclasses.
//

// CHECK-LABEL: sil private [noinline] @{{.*}}foo
// CHECK-NOT: class_method
// CHECK: checked_cast_br
// CHECK: function_ref
// CHECK: checked_cast_br
// CHECK: function_ref
  return a.f()
}

// Check that invocation of addConstraint() gets completely devirtualized and inlined
//
// CHECK-LABEL: sil private [noinline] @{{.*}}_TFC17devirt_base_classP33_C1ED27807F941A622F32D66AB60A15CD2F24test
// CHECK-NOT: class_method
// CHECK-NOT: function_ref
// CHECK: return

print("foo(C()) = \(foo(C()))")

private class F1 {
  init() {
  }

  func addConstraint() {
    addToGraph()
  }

  func addToGraph() {
  }
}

private class F2 : F1 {
  init (v : Int) {
    super.init()
    addConstraint()
  }

  override func addToGraph() {
  }
  
  @inline(never) 
  func test() {
    addConstraint()
  }
  
}

private class F3 : F2 {
}

private var f = F2(v:1)
f.test()
print("unary constraint is: \(f)")
