Files
swift-mirror/test/Interop/Cxx/class/access/using-non-public-module-interface.swift
John Hui edc742013d [cxx-interop] Make experimental flag ImportNonPublicCxxMembers (#79728)
ClangImporter can now import non-public members as of be73254cdc and 66c2e2c52b, 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 in bdf22948ce can enable this flag to opt into importing private members they wish to access from Swift.

rdar://145569473
2025-03-04 13:31:46 -05:00

55 lines
2.6 KiB
Swift

// RUN: %target-swift-ide-test -print-module -module-to-print=UsingNonPublic -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 PublUser {
// CHECK-NEXT: public init()
// CHECK-NEXT: public func publUsingProt() -> Return
// CHECK-NEXT: public func publUsingPubl() -> Return
// CHECK-NEXT: private func protUsingProt() -> Return
// CHECK-NEXT: private func protUsingPubl() -> Return
// CHECK-NEXT: private func omitUsingProt() -> Return
// CHECK-NEXT: public func omitUsingPubl() -> Return
// CHECK-NEXT: }
// CHECK: public struct ProtUser {
// CHECK-NEXT: public init()
// CHECK-NEXT: public func publUsingProt() -> Return
// CHECK-NEXT: public func publUsingPubl() -> Return
// CHECK-NEXT: private func protUsingProt() -> Return
// CHECK-NEXT: private func protUsingPubl() -> Return
// CHECK-NEXT: private func omitUsingProt() -> Return
// CHECK-NEXT: private func omitUsingPubl() -> Return
// CHECK-NEXT: }
// CHECK: public struct PrivUser {
// CHECK-NEXT: public init()
// CHECK-NEXT: public func publUsingProt() -> Return
// CHECK-NEXT: public func publUsingPubl() -> Return
// CHECK-NEXT: private func protUsingProt() -> Return
// CHECK-NEXT: private func protUsingPubl() -> Return
// CHECK-NEXT: private func omitUsingProt() -> Return
// CHECK-NEXT: private func omitUsingPubl() -> Return
// CHECK-NEXT: }
// CHECK: public struct PublPrivUser {
// CHECK-NEXT: public init()
// CHECK-NEXT: public func publUsingProt() -> Return
// CHECK-NEXT: public func publUsingPubl() -> Return
// CHECK-NEXT: private func protUsingProt() -> Return
// CHECK-NEXT: private func protUsingPubl() -> Return
// CHECK-NEXT: @available(*, unavailable, message: "this base member is not accessible because of private inheritance")
// CHECK-NEXT: private func omitUsingProt() -> Return
// CHECK-NEXT: @available(*, unavailable, message: "this base member is not accessible because of private inheritance")
// CHECK-NEXT: private func omitUsingPubl() -> Return
// CHECK-NEXT: }
// CHECK: public struct PrivUserPubl {
// CHECK-NEXT: public init()
// CHECK-NEXT: public func publUsingProt() -> Return
// CHECK-NEXT: public func publUsingPubl() -> Return
// CHECK-NEXT: private func protUsingProt() -> Return
// CHECK-NEXT: private func protUsingPubl() -> Return
// CHECK-NEXT: private func omitUsingProt() -> Return
// CHECK-NEXT: private func omitUsingPubl() -> Return
// CHECK-NEXT: }