// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module -Onone -o %t %S/Inputs/devirt_access_other_module.swift

// RUN: %target-swift-frontend -O -primary-file %s %S/Inputs/devirt_access_helper.swift -I %t -emit-sil -sil-inline-threshold 1000 -sil-verify-all | %FileCheck -check-prefix=WHOLE-MODULE %s
// RUN: %target-swift-frontend -O -primary-file %s %S/Inputs/devirt_access_helper.swift -I %t -emit-sil -sil-inline-threshold 1000 -sil-verify-all | %FileCheck -check-prefix=PRIMARY-FILE %s

//PRIMARY-FILE-LABEL: sil hidden @_T013devirt_access012testInternalD0yyF
//PRIMARY-FILE: class_method 
//WHOLE-MODULE-LABEL: sil hidden @_T013devirt_access012testInternalD0yyF
//WHOLE-MODULE: function_ref @_T013devirt_access16getInternalClassAA0dE0CyF
//WHOLE-MODULE: return
func testInternalInternal() {
  let obj = getInternalClass()
  obj.bar()
}


class LocalInternalClass {
  fileprivate func foo() {}
  func bar() {}
}

// Marked @inline(never) to keep from devirtualizing based on this.
@inline(never) func getLocalInternalClass() -> LocalInternalClass {
  return LocalInternalClass()
}

//PRIMARY-FILE-LABEL: sil hidden @_T013devirt_access17testLocalInternalyyF
//PRIMARY-FILE: class_method
//WHOLE-MODULE-LABEL: sil hidden @_T013devirt_access17testLocalInternalyyF
//WHOLE-MODULE: function_ref @_T013devirt_access21getLocalInternalClassAA0deF0CyF
//WHOLE-MODULE: return
func testLocalInternal() {
  let obj = getLocalInternalClass()
  obj.bar()
}

//PRIMARY-FILE-LABEL: sil hidden @_T013devirt_access16testLocalPrivateyyF
//PRIMARY-FILE: function_ref @_T013devirt_access21getLocalInternalClassAA0deF0CyF
//PRIMARY-FILE: return
//WHOLE-MODULE-LABEL: sil hidden @_T013devirt_access16testLocalPrivateyyF
//WHOLE-MODULE: function_ref @_T013devirt_access21getLocalInternalClassAA0deF0CyF
//WHOLE-MODULE: return
func testLocalPrivate() {
  let obj = getLocalInternalClass()
  obj.foo()
}


private class PrivateClass {
  fileprivate func foo() {}
  fileprivate func bar() {}
}

private class LocalPrivateSubclass : PrivateClass {
  override func foo() {}
}

// Marked @inline(never) to keep from devirtualizing based on this.
@inline(never) private func getPrivateClass() -> PrivateClass {
  return LocalPrivateSubclass()
}

//PRIMARY-FILE-LABEL: sil hidden @_T013devirt_access11testPrivateyyF
//PRIMARY-FILE: function_ref @_T013devirt_access15getPrivateClass33_{{.*}}
//WHOLE-MODULE-LABEL: sil hidden @_T013devirt_access11testPrivateyyF
//WHOLE-MODULE: function_ref @_T013devirt_access15getPrivateClass33_{{.*}}
//WHOLE-MODULE: return
func testPrivate() {
  let obj = getPrivateClass()
  obj.foo()
}

//PRIMARY-FILE-LABEL: sil hidden @_T013devirt_access21testPrivateOverriddenyyF
//PRIMARY-FILE: function_ref @_T013devirt_access15getPrivateClass33_{{.*}}
//WHOLE-MODULE-LABEL: sil hidden @_T013devirt_access21testPrivateOverriddenyyF
//WHOLE-MODULE: function_ref @_T013devirt_access15getPrivateClass33_{{.*}}
//WHOLE-MODULE: return
func testPrivateOverridden() {
  let obj = getPrivateClass()
  obj.bar()
}
