mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Decls with a package access level are currently set to public SIL linkages. This limits the ability to have more fine-grained control and optimize around resilience and serialization. This PR introduces a separate SIL linkage and FormalLinkage for package decls, pipes them down to IRGen, and updates linkage checks at call sites to include package linkage. Resolves rdar://121409846
250 lines
14 KiB
Swift
250 lines
14 KiB
Swift
// RUN: %target-typecheck-verify-swift -package-name accessibility_warnings
|
|
// RUN: %target-swift-emit-silgen %s -package-name accessibility_warnings -module-name accessibility_warnings | %FileCheck %s -check-prefixes=CHECK,CHECK-NONRES
|
|
// RUN: %target-swift-emit-silgen %s -package-name accessibility_warnings -module-name accessibility_warnings -enable-library-evolution | %FileCheck %s -check-prefixes=CHECK,CHECK-RES
|
|
|
|
// This file tests that the AST produced after fixing accessibility warnings
|
|
// is valid according to SILGen and the verifiers.
|
|
|
|
public struct PublicStruct {
|
|
// CHECK-RES-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings12PublicStructV9publicVarSivpfi
|
|
// CHECK-NONRES-DAG: sil [transparent] [ossa] @$s22accessibility_warnings12PublicStructV9publicVarSivpfi
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV9publicVarSivg
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings12PublicStructV9publicVarSivg
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV9publicVarSivs
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings12PublicStructV9publicVarSivs
|
|
public var publicVar = 0
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings12PublicStructVACycfC
|
|
}
|
|
|
|
package struct PackageStruct {
|
|
// CHECK-RES-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13PackageStructV9publicVarSivpfi
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings13PackageStructV9publicVarSivpfi
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings13PackageStructV9publicVarSivg
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings13PackageStructV9publicVarSivg
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings13PackageStructV9publicVarSivs
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings13PackageStructV9publicVarSivs :
|
|
package var publicVar = 0
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings13PackageStructVACycfC
|
|
}
|
|
|
|
internal struct InternalStruct {
|
|
public var publicVar = 0
|
|
|
|
public private(set) var publicVarPrivateSet = 0
|
|
|
|
// expected-warning@+1 {{'public(set)' modifier is redundant for a public property}} {{10-22=}}
|
|
public public(set) var publicVarPublicSet = 0
|
|
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV16publicVarGetOnlySivg
|
|
public var publicVarGetOnly: Int { return 0 }
|
|
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV15publicVarGetSetSivg
|
|
public var publicVarGetSet: Int { get { return 0 } set {} }
|
|
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructVACycfC
|
|
}
|
|
|
|
private struct PrivateStruct {
|
|
public var publicVar = 0
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLVADycfC
|
|
}
|
|
|
|
|
|
extension PublicStruct {
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV1xACSi_tcfC
|
|
public init(x: Int) { self.init() }
|
|
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV18publicVarExtensionSivg
|
|
public var publicVarExtension: Int { get { return 0 } set {} }
|
|
}
|
|
|
|
extension PackageStruct {
|
|
// CHECK-DAG: sil package [ossa] @$s22accessibility_warnings13PackageStructV1xACSi_tcfC : $@convention(method) (
|
|
public init(x: Int) { self.init() }
|
|
// CHECK-DAG: sil package [ossa] @$s22accessibility_warnings13PackageStructV18publicVarExtensionSivg
|
|
public var publicVarExtension: Int { get { return 0 } set {} }
|
|
}
|
|
|
|
extension InternalStruct {
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV1xACSi_tcfC
|
|
public init(x: Int) { self.init() }
|
|
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV18publicVarExtensionSivg
|
|
public var publicVarExtension: Int { get { return 0 } set {} }
|
|
}
|
|
|
|
extension PrivateStruct {
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLV1xADSi_tcfC
|
|
public init(x: Int) { self.init() }
|
|
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLV18publicVarExtensionSivg
|
|
public var publicVarExtension: Int { get { return 0 } set {} }
|
|
}
|
|
|
|
public extension PublicStruct {
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV09extMemberC0yyF
|
|
public func extMemberPublic() {} // expected-warning {{'public' modifier is redundant for instance method declared in a public extension}} {{3-10=}}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV07extImplC033_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplPublic() {}
|
|
}
|
|
|
|
package extension PublicStruct {
|
|
// CHECK-DAG: sil package [ossa] @$s22accessibility_warnings12PublicStructV16extMemberPackageyyF
|
|
func extMemberPackage() {}
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings12PublicStructV16extMethodPackageyyF
|
|
internal func extMethodPackage() {}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV14extImplPackage33_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplPackage() {}
|
|
}
|
|
|
|
internal extension PublicStruct {
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV17extMemberInternalyyF
|
|
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{none}}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV15extImplInternal33_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplInternal() {}
|
|
}
|
|
private extension PublicStruct {
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings12PublicStructV16extMemberPrivateyyF
|
|
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{none}}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV14extImplPrivate33_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplPrivate() {}
|
|
}
|
|
|
|
package extension PackageStruct {
|
|
// CHECK-DAG: sil package [ossa] @$s22accessibility_warnings13PackageStructV09extMemberC0yyF
|
|
func extMemberPackage() {}
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings13PackageStructV09extMethodC0yyF
|
|
internal func extMethodPackage() {}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PackageStructV07extImplC033_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplPackage() {}
|
|
}
|
|
|
|
internal extension InternalStruct {
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV09extMemberC0yyF
|
|
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{none}}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings14InternalStructV07extImplC033_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplInternal() {}
|
|
}
|
|
private extension InternalStruct {
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV16extMemberPrivateyyF
|
|
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{none}}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings14InternalStructV14extImplPrivate33_5D2F2E026754A901C0FF90C404896D02LLyyF
|
|
private func extImplPrivate() {}
|
|
}
|
|
|
|
|
|
private extension PrivateStruct {
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLV09extMemberC0yyF
|
|
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{none}}
|
|
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLV07extImplC0yyF
|
|
private func extImplPrivate() {}
|
|
}
|
|
|
|
public protocol PublicReadOnlyOperations {
|
|
var size: Int { get }
|
|
subscript (_: Int) -> Int { get }
|
|
}
|
|
|
|
internal struct PrivateSettersForReadOnlyInternal : PublicReadOnlyOperations {
|
|
// CHECK-DAG: sil hidden{{( \[.+\])*}} [ossa] @$s22accessibility_warnings33PrivateSettersForReadOnlyInternalV4sizeSivg
|
|
public private(set) var size = 0
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings33PrivateSettersForReadOnlyInternalVyS2icig
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings33PrivateSettersForReadOnlyInternalVyS2icis
|
|
internal private(set) subscript (_: Int) -> Int { // no-warning
|
|
get { return 42 }
|
|
set {}
|
|
}
|
|
}
|
|
|
|
public class PublicClass {
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC9publicVarSivg
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings11PublicClassC9publicVarSivg
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC9publicVarSivs
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings11PublicClassC9publicVarSivs
|
|
public var publicVar = 0
|
|
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPrivateSetSivg
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPrivateSetSivg
|
|
// CHECK-RES-DAG: sil hidden [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPrivateSetSivs
|
|
// CHECK-NONRES-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPrivateSetSivs
|
|
public private(set) var publicVarPrivateSet = 0
|
|
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC20publicVarInternalSetSivg
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings11PublicClassC20publicVarInternalSetSivg
|
|
// CHECK-RES-DAG: sil hidden [ossa] @$s22accessibility_warnings11PublicClassC20publicVarInternalSetSivs
|
|
// CHECK-NONRES-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings11PublicClassC20publicVarInternalSetSivs
|
|
public internal(set) var publicVarInternalSet = 0
|
|
|
|
// CHECK-RES-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPackageSetSivg
|
|
// CHECK-NONRES-DAG: sil [transparent] [serialized] [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPackageSetSivg
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPackageSetSivs
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings11PublicClassC19publicVarPackageSetSivs
|
|
public package(set) var publicVarPackageSet = 0
|
|
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC16publicVarGetOnlySivg
|
|
public var publicVarGetOnly: Int { return 0 }
|
|
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC15publicVarGetSetSivg
|
|
// CHECK-DAG: sil [ossa] @$s22accessibility_warnings11PublicClassC15publicVarGetSetSivs
|
|
public var publicVarGetSet: Int { get { return 0 } set {} }
|
|
|
|
// CHECK-DAG: sil hidden{{( \[.+\])*}} [ossa] @$s22accessibility_warnings11PublicClassCACycfc
|
|
}
|
|
|
|
internal class InternalClass {
|
|
// CHECK-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13InternalClassC9publicVarSivg
|
|
// CHECK-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13InternalClassC9publicVarSivs
|
|
public var publicVar = 0
|
|
|
|
// CHECK-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13InternalClassC19publicVarPrivateSetSivg
|
|
// CHECK-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13InternalClassC19publicVarPrivateSetSivs
|
|
public private(set) var publicVarPrivateSet = 0
|
|
|
|
// expected-warning@+1 {{'public(set)' modifier is redundant for a public property}} {{10-22=}}
|
|
public public(set) var publicVarPublicSet = 0
|
|
|
|
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings13InternalClassC16publicVarGetOnlySivg
|
|
public var publicVarGetOnly: Int { return 0 }
|
|
|
|
// CHECK-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13InternalClassC18publicVarPublicSetSivg
|
|
// CHECK-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings13InternalClassC18publicVarPublicSetSivs
|
|
public var publicVarGetSet: Int { get { return 0 } set {} }
|
|
|
|
// CHECK-DAG: sil hidden{{( \[.+\])*}} [ossa] @$s22accessibility_warnings13InternalClassCACycfc
|
|
}
|
|
|
|
package class PackageClass {
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC9publicVarSivg
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC9publicVarSivs
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings12PackageClassC9publicVarSivg
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings12PackageClassC9publicVarSivs
|
|
public var publicVar = 0
|
|
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC19publicVarPrivateSetSivg
|
|
// CHECK-RES-DAG: sil hidden [ossa] @$s22accessibility_warnings12PackageClassC19publicVarPrivateSetSivs
|
|
// CHECK-NONRES-DAG: sil package [transparent] [ossa] @$s22accessibility_warnings12PackageClassC19publicVarPrivateSetSivg
|
|
// CHECK-NONRES-DAG: sil hidden [transparent] [ossa] @$s22accessibility_warnings12PackageClassC19publicVarPrivateSetSivs
|
|
public private(set) var publicVarPrivateSet = 0
|
|
|
|
// expected-warning@+1 {{'public(set)' modifier is redundant for a public property}} {{10-22=}}
|
|
public public(set) var publicVarPublicSet = 0
|
|
|
|
// CHECK-RES-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC18publicVarPublicSetSivg
|
|
// CHECK-NONRES-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC16publicVarGetOnlySivg
|
|
public var publicVarGetOnly: Int { return 0 }
|
|
|
|
// CHECK-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC15publicVarGetSetSivg
|
|
// CHECK-DAG: sil package [ossa] @$s22accessibility_warnings12PackageClassC15publicVarGetSetSivs
|
|
public var publicVarGetSet: Int { get { return 0 } set {} }
|
|
|
|
// CHECK-DAG: sil hidden{{( \[.+\])*}} [ossa] @$s22accessibility_warnings12PackageClassCACycfc
|
|
}
|
|
|
|
private class PrivateClass {
|
|
//CHECK-DAG: sil private [transparent] [ossa] @$s22accessibility_warnings12PrivateClass33_5D2F2E026754A901C0FF90C404896D02LLC9publicVarSivg
|
|
// CHECK-DAG: sil private [transparent] [ossa] @$s22accessibility_warnings12PrivateClass33_5D2F2E026754A901C0FF90C404896D02LLC9publicVarSivs
|
|
public var publicVar = 0
|
|
// CHECK-DAG: sil private{{( \[.+\])*}} [ossa] @$s22accessibility_warnings12PrivateClass33_5D2F2E026754A901C0FF90C404896D02LLCADycfc
|
|
}
|
|
|