Skip to content

Commit 8bf0b0c

Browse files
committed
[test] Add a cross-module struct initializer test with private fields
1 parent 7ff98f3 commit 8bf0b0c

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

test/SILOptimizer/Inputs/definite_init_cross_module/OtherModule.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,12 @@ public struct GenericPoint<T> {
2424
self.y = y
2525
}
2626
}
27+
28+
public struct PrivatePoint {
29+
private var x, y: Double
30+
31+
public init(x: Double, y: Double) {
32+
self.x = x
33+
self.y = y
34+
}
35+
}

test/SILOptimizer/definite_init_cross_module.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,19 @@ extension NonnullWrapper {
181181
// zeroing initializer.
182182
} // expected-error {{'self.init' isn't called on all paths before returning from initializer}}
183183
}
184+
185+
186+
extension PrivatePoint {
187+
init(xxx: Double, yyy: Double) {
188+
// This is OK
189+
self.init(x: xxx, y: yyy)
190+
}
191+
192+
init(other: PrivatePoint) {
193+
// This is OK
194+
self = other
195+
}
196+
197+
init() {
198+
} // expected-error {{'self.init' isn't called on all paths before returning from initializer}}
199+
}

test/SILOptimizer/definite_init_cross_module_swift4.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %empty-directory(%t)
22
// RUN: %target-swift-frontend -emit-module -emit-module-path=%t/OtherModule.swiftmodule %S/Inputs/definite_init_cross_module/OtherModule.swift
3-
// RUN: %target-swift-frontend -emit-sil -verify -I %t -swift-version 4 %s > /dev/null -import-objc-header %S/Inputs/definite_init_cross_module/BridgingHeader.h
3+
// RUN: %target-swift-frontend -emit-sil -verify -verify-ignore-unknown -I %t -swift-version 4 %s > /dev/null -import-objc-header %S/Inputs/definite_init_cross_module/BridgingHeader.h
44

55
import OtherModule
66

@@ -221,3 +221,21 @@ extension NonnullWrapper {
221221
// zeroing initializer.
222222
}
223223
}
224+
225+
226+
extension PrivatePoint {
227+
init(xxx: Double, yyy: Double) {
228+
// This is OK
229+
self.init(x: xxx, y: yyy)
230+
}
231+
232+
init(other: PrivatePoint) {
233+
// This is OK
234+
self = other
235+
}
236+
237+
// Ideally we wouldn't mention the names of non-public stored properties
238+
// across module boundaries, but this will go away in Swift 5 mode anyway.
239+
init() {
240+
} // expected-error {{return from initializer without initializing all stored properties}}
241+
}

0 commit comments

Comments
 (0)