File: unsafe-extensions.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (137 lines) | stat: -rw-r--r-- 5,534 bytes parent folder | download
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()'