Files
swift-mirror/test/Sema/accessibility_package_inline_interface.swift
Allan Shortlidge 49b59f69c9 Revert https://github.com/swiftlang/swift/pull/75745.
Finishes resolving rdar://139236053.
2024-11-05 14:37:56 -08:00

146 lines
4.4 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %{python} %utils/split_file.py -o %t %s
// RUN: %target-swift-frontend -module-name Utils1 %t/Utils.swift -emit-module -emit-module-path %t/Utils1.swiftmodule -package-name myLib -swift-version 5
// RUN: test -f %t/Utils1.swiftmodule
// RUN: %target-swift-frontend -module-name Utils %t/Utils.swift -emit-module -emit-module-interface-path %t/Utils.swiftinterface -package-name myLib -enable-library-evolution -swift-version 5
// RUN: test -f %t/Utils.swiftinterface
// RUN: %target-swift-typecheck-module-from-interface(%t/Utils.swiftinterface) -I%t
// RUN: %FileCheck %s -check-prefix CHECK-UTILS < %t/Utils.swiftinterface
// CHECK-UTILS: -module-name Utils
// CHECK-UTILS: -package-name myLib
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: package class PackageKlassProto {
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: package init()
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: package var pkgVar: Swift.Double
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: deinit
// CHECK-UTILS: }
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: package class PackageKlassForInline {
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: package init()
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: package func foo1()
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: deinit
// CHECK-UTILS: }
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: internal class InternalKlassProto {
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: internal init()
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: internal var internalVar: Swift.Double
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: deinit
// CHECK-UTILS: }
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: internal class InternalKlassForInline {
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: internal init()
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: internal func bar1()
// CHECK-UTILS: @usableFromInline
// CHECK-UTILS: deinit
// CHECK-UTILS: }
// CHECK-UTILS: @inlinable public func publicFunc() {
// CHECK-UTILS: let a = PackageKlassProto().pkgVar
// CHECK-UTILS: let b = InternalKlassProto().internalVar
// CHECK-UTILS: PackageKlassForInline().foo1()
// CHECK-UTILS: InternalKlassForInline().bar1()
// CHECK-UTILS: print(a, b)
// CHECK-UTILS: }
// CHECK-UTILS: @inlinable internal func internalFunc() {
// CHECK-UTILS: let a = PackageKlassProto().pkgVar
// CHECK-UTILS: let b = InternalKlassProto().internalVar
// CHECK-UTILS: PackageKlassForInline().foo1()
// CHECK-UTILS: InternalKlassForInline().bar1()
// CHECK-UTILS: print(a, b)
// CHECK-UTILS: }
// CHECK-UTILS: @inlinable package func packageFunc() {
// CHECK-UTILS: let a = PackageKlassProto().pkgVar
// CHECK-UTILS: let b = InternalKlassProto().internalVar
// CHECK-UTILS: PackageKlassForInline().foo1()
// CHECK-UTILS: InternalKlassForInline().bar1()
// CHECK-UTILS: print(a, b)
// CHECK-UTILS: }
// BEGIN Utils.swift
package protocol PackageProto {
var pkgVar: Double { get set }
func pkgFunc()
}
package class PackageKlass {
package init() {}
package private(set) var pkgVar: Double = 1.0
package func pkgFunc() {}
}
@usableFromInline
package class PackageKlassProto: PackageProto {
@usableFromInline package init() {}
@usableFromInline package var pkgVar = 1.0
package func pkgFunc() {}
}
@usableFromInline
package class PackageKlassForInline {
@usableFromInline package init() {}
@usableFromInline package func foo1() {}
package func foo2() {}
}
protocol InternalProto {
var internalVar: Double { get set }
func internalFunc()
}
class InternalKlass {
init() {}
}
@usableFromInline
class InternalKlassProto: InternalProto {
@usableFromInline init() {}
@usableFromInline var internalVar = 1.0
func internalFunc() {}
}
@usableFromInline
class InternalKlassForInline {
@usableFromInline init() {}
@usableFromInline func bar1() {}
func bar2() {}
}
@inlinable
public func publicFunc() {
let a = PackageKlassProto().pkgVar
let b = InternalKlassProto().internalVar
PackageKlassForInline().foo1()
InternalKlassForInline().bar1()
print(a, b)
}
@inlinable
func internalFunc() {
let a = PackageKlassProto().pkgVar
let b = InternalKlassProto().internalVar
PackageKlassForInline().foo1()
InternalKlassForInline().bar1()
print(a, b)
}
@inlinable
package func packageFunc() {
let a = PackageKlassProto().pkgVar
let b = InternalKlassProto().internalVar
PackageKlassForInline().foo1()
InternalKlassForInline().bar1()
print(a, b)
}