Files
swift-mirror/test/SILGen/accessibility_warnings.swift
Ellie Shin 72a7760027 Support package SIL linkage.
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
2024-02-06 01:23:14 -08:00

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
}