mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
ClangImporter can now import non-public members as ofbe73254cdcand66c2e2c52b, but doing so triggers some latent ClangImporter bugs in projects that don't use or need those non-public members. This patch introduces a new experimental feature flag, ImportNonPublicCxxMembers, that guards against the importation of non-public members while we iron out those latent issues. Adopters of the SWIFT_PRIVATE_FILEID feature introduced inbdf22948cecan enable this flag to opt into importing private members they wish to access from Swift. rdar://145569473
85 lines
3.8 KiB
Swift
85 lines
3.8 KiB
Swift
// RUN: %target-swift-ide-test -print-module -module-to-print=UsingBaseMembers -print-access -I %S/Inputs -source-filename=x -cxx-interoperability-mode=default -enable-experimental-feature ImportNonPublicCxxMembers | %FileCheck %s
|
|
// REQUIRES: swift_feature_ImportNonPublicCxxMembers
|
|
|
|
// CHECK: public struct PublicBase {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: public func publicGetter() -> Int32
|
|
// CHECK-NEXT: public mutating func publicSetter(_ v: Int32)
|
|
// CHECK-NEXT: public func notExposed()
|
|
// CHECK-NEXT: private var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct PublicBasePrivateInheritance {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: public func publicGetter() -> Int32
|
|
// CHECK-NEXT: public mutating func publicSetter(_ v: Int32)
|
|
// CHECK-NEXT: private func notExposed()
|
|
// CHECK-NEXT: @available(*, unavailable, message: "this base member is not accessible because it is private")
|
|
// CHECK-NEXT: private var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct PublicBaseProtectedInheritance {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: public func publicGetter() -> Int32
|
|
// CHECK-NEXT: public mutating func publicSetter(_ v: Int32)
|
|
// CHECK-NEXT: private func notExposed()
|
|
// CHECK-NEXT: @available(*, unavailable, message: "this base member is not accessible because it is private")
|
|
// CHECK-NEXT: private var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct PublicBaseUsingPrivateTypedef {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: private typealias MyBase = PublicBase
|
|
// CHECK-NEXT: public func publicGetter() -> Int32
|
|
// CHECK-NEXT: public mutating func publicSetter(_ v: Int32)
|
|
// CHECK-NEXT: private func notExposed()
|
|
// CHECK-NEXT: @available(*, unavailable, message: "this base member is not accessible because it is private")
|
|
// CHECK-NEXT: private var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct PublicBaseUsingPrivateUsingType {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: private typealias MyBase = PublicBase
|
|
// CHECK-NEXT: public func publicGetter() -> Int32
|
|
// CHECK-NEXT: public mutating func publicSetter(_ v: Int32)
|
|
// CHECK-NEXT: private func notExposed()
|
|
// CHECK-NEXT: @available(*, unavailable, message: "this base member is not accessible because it is private")
|
|
// CHECK-NEXT: private var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct UsingBaseConstructorWithParam {
|
|
// CHECK-NEXT: public init(consuming _: consuming IntBox)
|
|
// CHECK-NEXT: public init(_: IntBox)
|
|
// CHECK-NEXT: public init(_: UInt32)
|
|
// CHECK-NEXT: public init(_: Int32)
|
|
// CHECK-NEXT: public var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct UsingBaseConstructorEmpty {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: public init(consuming _: consuming Empty)
|
|
// CHECK-NEXT: public init(_: Empty)
|
|
// CHECK-NEXT: public var value: Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct ProtectedBase {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: private func protectedGetter() -> Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct ProtectedMemberPrivateInheritance {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: public func protectedGetter() -> Int32
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: public struct OperatorBasePrivateInheritance : CxxConvertibleToBool {
|
|
// CHECK-NEXT: public init()
|
|
// CHECK-NEXT: public var pointee: Int32 { get }
|
|
// CHECK-NEXT: public func __convertToBool() -> Bool
|
|
// CHECK-NEXT: @available(*, unavailable, message: "use .pointee property")
|
|
// CHECK-NEXT: public func __operatorStar() -> Int32
|
|
// CHECK-NEXT: prefix public static func ! (lhs: OperatorBasePrivateInheritance) -> OperatorBase
|
|
// CHECK-NEXT: @available(*, unavailable, message: "use ! instead")
|
|
// CHECK-NEXT: public func __operatorExclaim() -> OperatorBase
|
|
// CHECK-NEXT: }
|