1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
// RUN: %empty-directory(%t)
// REQUIRES: asserts
// RUN: %target-swift-frontend -emit-module %s \
// RUN: -enable-library-evolution -swift-version 5 \
// RUN: -enable-deserialization-safety \
// RUN: -Xllvm -debug-only=Serialization 2>&1 \
// RUN: | %FileCheck --check-prefixes=SAFETY-PRIVATE,SAFETY-INTERNAL %s
// RUN: %target-swift-frontend -emit-module %s \
// RUN: -enable-library-evolution -swift-version 5 \
// RUN: -enable-deserialization-safety \
// RUN: -Xllvm -debug-only=Serialization \
// RUN: -enable-testing 2>&1 \
// RUN: | %FileCheck --check-prefixes=DISABLED %s
/// Don't mark decls as unsafe when private import is enabled.
// RUN: %target-swift-frontend -emit-module %s \
// RUN: -enable-library-evolution -swift-version 5 \
// RUN: -enable-deserialization-safety \
// RUN: -Xllvm -debug-only=Serialization \
// RUN: -enable-private-imports 2>&1 \
// RUN: | %FileCheck --check-prefixes=DISABLED %s
/// Don't mark decls as unsafe without library evolution.
// RUN: %target-swift-frontend -emit-module %s \
// RUN: -enable-deserialization-safety -swift-version 5 \
// RUN: -Xllvm -debug-only=Serialization 2>&1 \
// RUN: | %FileCheck --check-prefixes=DISABLED %s
// DISABLED-NOT: Serialization safety
/// Public
// SAFETY-PRIVATE: Serialization safety, safe: 'PublicProto'
public protocol PublicProto {}
public struct ExtendedPublic {
// SAFETY-PRIVATE: Serialization safety, safe: 'ExtendedPublic'
}
extension ExtendedPublic {
// SAFETY-PRIVATE: Serialization safety, safe: 'extension ExtendedPublic'
public func publicMember() {}
}
extension ExtendedPublic : PublicProto {
// SAFETY-PRIVATE: Serialization safety, safe: 'extension ExtendedPublic'
}
/// Internal
internal protocol InternalProto {}
// SAFETY-INTERNAL: Serialization safety, unsafe: 'InternalProto'
// NO-SAFETY-INTERNAL: Serialization safety, unsafe: 'InternalProto'
internal struct ExtendedInternal {}
// SAFETY-INTERNAL: Serialization safety, unsafe: 'ExtendedInternal'
// NO-SAFETY-INTERNAL: Serialization safety, safe: 'ExtendedInternal'
extension ExtendedInternal {
// SAFETY-INTERNAL: Serialization safety, unsafe: 'extension ExtendedInternal'
// NO-SAFETY-INTERNAL: Serialization safety, safe: 'extension ExtendedInternal'
internal func internalMember() {}
}
extension ExtendedInternal : InternalProto {}
// SAFETY-INTERNAL: Serialization safety, unsafe: 'extension ExtendedInternal'
// NO-SAFETY-INTERNAL: Serialization safety, safe: 'extension ExtendedInternal'
/// Private
private protocol PrivateProto {}
// SAFETY-PRIVATE: Serialization safety, unsafe: 'PrivateProto'
private struct ExtendedPrivate {}
// SAFETY-PRIVATE: Serialization safety, unsafe: 'ExtendedPrivate'
extension ExtendedPrivate {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedPrivate'
private func privateMember() {}
}
extension ExtendedPrivate : PrivateProto {}
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedPrivate'
/// Fileprivate
private protocol FileprivateProto {}
// SAFETY-PRIVATE: Serialization safety, unsafe: 'FileprivateProto'
private struct ExtendedFileprivate {}
// SAFETY-PRIVATE: Serialization safety, unsafe: 'ExtendedFileprivate'
extension ExtendedFileprivate {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedFileprivate'
private func fileprivateMember() {}
}
extension ExtendedFileprivate : FileprivateProto {}
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedFileprivate'
/// Back to public
extension ExtendedPublic : InternalProto {
// SAFETY-INTERNAL: Serialization safety, unsafe: 'extension ExtendedPublic'
// NO-SAFETY-INTERNAL: Serialization safety, unsafe: 'extension ExtendedPublic'
}
extension ExtendedPublic : PrivateProto {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedPublic'
}
extension ExtendedPublic : FileprivateProto {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedPublic'
}
extension ExtendedPublic {
// SAFETY-INTERNAL: Serialization safety, unsafe: 'extension ExtendedPublic'
// NO-SAFETY-INTERNAL: Serialization safety, safe: 'extension ExtendedPublic'
internal func internalMemberToPublic() {}
}
extension ExtendedPublic {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedPublic'
private func privateMemberToPublic() {}
}
extension ExtendedPublic {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedPublic'
fileprivate func fileprivateMemberToPublic() {}
}
extension ExtendedInternal {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedInternal'
private func privateMemberToInternal() {}
}
extension ExtendedInternal {
// SAFETY-PRIVATE: Serialization safety, unsafe: 'extension ExtendedInternal'
fileprivate func fileprivateMemberToInternal() {}
}
/// Members are serialized last
// SAFETY-INTERNAL: Serialization safety, unsafe: 'internalMember()'
// SAFETY-PRIVATE: Serialization safety, unsafe: 'privateMember()'
// SAFETY-PRIVATE: Serialization safety, unsafe: 'fileprivateMember()'
// SAFETY-INTERNAL: Serialization safety, unsafe: 'internalMemberToPublic()'
// NO-SAFETY-INTERNAL: Serialization safety, safe: 'internalMemberToPublic()'
// SAFETY-PRIVATE: Serialization safety, unsafe: 'privateMemberToPublic()'
// SAFETY-PRIVATE: Serialization safety, unsafe: 'fileprivateMemberToPublic()'
// SAFETY-PRIVATE: Serialization safety, unsafe: 'privateMemberToInternal()'
// SAFETY-PRIVATE: Serialization safety, unsafe: 'fileprivateMemberToInternal()'
|