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

// Check that this file does not crash a compiler.
//
// The devirtualizer should not devirtualize calls inside fragile functions,
// if the resulting direct call would refer to a private or hidden symbol.
//
// rdar://21408247

public class ExternalClass {
  fileprivate func foo() {}
}

public func getExternalClass() -> ExternalClass {
  return ExternalClass()
}

// Note: This will eventually be illegal (to have a public @_transparent function
// referring to a private method), but for now it lets us test what can and
// can't be optimized.
// CHECK-LABEL: sil [transparent] [fragile] @_TTSfq4g___TF26devirt_access_other_module9invokeFooFCS_13ExternalClassT_
// CHECK-NOT: function_ref
// CHECK: class_method
// CHECK-NOT: function_ref
// CHECK: apply
// CHECK-NOT: function_ref
// CHECK-NOT: checked_cast_br
// CHECK-NOT: bb1
// CHECK: return
@_transparent public func invokeFoo(_ obj: ExternalClass) {
  obj.foo()
}

private class PrivateSubclass : ExternalClass {
  override fileprivate func foo() {}
}

internal class InternalSubclass : ExternalClass {
  override fileprivate func foo() {}
}
