Skip to content

Commit 8857721

Browse files
authored
Merge pull request #76472 from atrick/fix-opt-test
Fix convenience_init_peer_delegation.swift; avoid specialization.
2 parents 38a09b4 + 2ed7ca9 commit 8857721

File tree

1 file changed

+76
-72
lines changed

1 file changed

+76
-72
lines changed

test/Interpreter/convenience_init_peer_delegation.swift

Lines changed: 76 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@
3232
// Because of the use of 'sed' in this test.
3333
// REQUIRES: shell
3434

35-
// rdar://133393259 fails in optimized tests.
36-
// UNSUPPORTED: swift_test_mode_optimize
37-
// UNSUPPORTED: swift_test_mode_optimize_size
38-
3935
import Darwin
4036
import Foundation
4137

@@ -141,71 +137,79 @@ func check(base: Int = 0, sub: Int = 0,
141137
}
142138

143139

144-
// CHECK: START
145-
print("START")
146-
147-
// Check that this whole setup works.
148-
// CHECK-NEXT: init(swift:) Base
149-
check(base: 1) { Base(swift: ()) }
150-
// CHECK-NEXT: init(swift:) Sub
151-
check(sub: 1) { Sub(swift: ()) }
152-
// CHECK-NEXT: init(objc:) Base
153-
check(base: 1) { Base(objc: ()) }
154-
// CHECK-NEXT: init(objc:) Sub
155-
check(sub: 1) { Sub(objc: ()) }
156-
157-
// CHECK-NEXT: init(swiftToSwift:) Sub
158-
// CHECK-NEXT: init(swift:) Sub
159-
check(sub: 1) { Sub(swiftToSwift: ()) }
160-
// CHECK-NEXT: init(objcToSwift:) Sub
161-
// CHECK-NEXT: init(swift:) Sub
162-
check(sub: 2) { Sub(objcToSwift: ()) }
163-
// CHECK-NEXT: init(swiftToObjC:) Sub
164-
// CHECK-NEXT: init(objc:) Sub
165-
check(sub: 1) { Sub(swiftToObjC: ()) }
166-
// CHECK-NEXT: init(objcToObjC:) Sub
167-
// CHECK-NEXT: init(objc:) Sub
168-
check(sub: 1) { Sub(objcToObjC: ()) }
169-
170-
// CHECK-NEXT: init(swiftToSwiftConvenience:) Sub
171-
// CHECK-NEXT: init(swiftToSwift:) Sub
172-
// CHECK-NEXT: init(swift:) Sub
173-
check(sub: 1) { Sub(swiftToSwiftConvenience: ()) }
174-
// CHECK-NEXT: init(objcToSwiftConvenience:) Sub
175-
// CHECK-NEXT: init(swiftToSwift:) Sub
176-
// CHECK-NEXT: init(swift:) Sub
177-
check(sub: 2) { Sub(objcToSwiftConvenience: ()) }
178-
// CHECK-NEXT: init(swiftToObjCConvenience:) Sub
179-
// CHECK-NEXT: init(objcToObjC:) Sub
180-
// CHECK-NEXT: init(objc:) Sub
181-
check(sub: 1) { Sub(swiftToObjCConvenience: ()) }
182-
// CHECK-NEXT: init(objcToObjCConvenience:) Sub
183-
// CHECK-NEXT: init(objcToObjC:) Sub
184-
// CHECK-NEXT: init(objc:) Sub
185-
check(sub: 1) { Sub(objcToObjCConvenience: ()) }
186-
187-
// Force ObjC dispatch without conforming Sub or Base to the protocol,
188-
// because it's possible that `required` perturbs things and we want to test
189-
// both ways.
190-
let SubAsObjC = unsafeBitCast(Sub.self as AnyObject,
191-
to: ForceObjCDispatch.Type.self)
192-
193-
// CHECK-NEXT: init(objc:) Sub
194-
check(sub: 1) { SubAsObjC.init(objc: ()) }
195-
// CHECK-NEXT: init(objcToSwift:) Sub
196-
// CHECK-NEXT: init(swift:) Sub
197-
check(sub: 2) { SubAsObjC.init(objcToSwift: ()) }
198-
// CHECK-NEXT: init(objcToObjC:) Sub
199-
// CHECK-NEXT: init(objc:) Sub
200-
check(sub: 1) { SubAsObjC.init(objcToObjC: ()) }
201-
// CHECK-NEXT: init(objcToSwiftConvenience:) Sub
202-
// CHECK-NEXT: init(swiftToSwift:) Sub
203-
// CHECK-NEXT: init(swift:) Sub
204-
check(sub: 2) { SubAsObjC.init(objcToSwiftConvenience: ()) }
205-
// CHECK-NEXT: init(objcToObjCConvenience:) Sub
206-
// CHECK-NEXT: init(objcToObjC:) Sub
207-
// CHECK-NEXT: init(objc:) Sub
208-
check(sub: 1) { SubAsObjC.init(objcToObjCConvenience: ()) }
209-
210-
// CHECK-NEXT: END
211-
print("END")
140+
// Specialization of the 'check' function may result in the closure being deleted, which breaks the test. Disabling
141+
// optimization of this calling function prevents closure specialization.
142+
@_optimize(none)
143+
func main() {
144+
// CHECK: START
145+
print("START")
146+
147+
// Check that this whole setup works.
148+
// CHECK-NEXT: init(swift:) Base
149+
check(base: 1) { Base(swift: ()) }
150+
// CHECK-NEXT: init(swift:) Sub
151+
check(sub: 1) { Sub(swift: ()) }
152+
// CHECK-NEXT: init(objc:) Base
153+
check(base: 1) { Base(objc: ()) }
154+
// CHECK-NEXT: init(objc:) Sub
155+
check(sub: 1) { Sub(objc: ()) }
156+
157+
// CHECK-NEXT: init(swiftToSwift:) Sub
158+
// CHECK-NEXT: init(swift:) Sub
159+
check(sub: 1) { Sub(swiftToSwift: ()) }
160+
// CHECK-NEXT: init(objcToSwift:) Sub
161+
// CHECK-NEXT: init(swift:) Sub
162+
check(sub: 2) { Sub(objcToSwift: ()) }
163+
// CHECK-NEXT: init(swiftToObjC:) Sub
164+
// CHECK-NEXT: init(objc:) Sub
165+
check(sub: 1) { Sub(swiftToObjC: ()) }
166+
// CHECK-NEXT: init(objcToObjC:) Sub
167+
// CHECK-NEXT: init(objc:) Sub
168+
check(sub: 1) { Sub(objcToObjC: ()) }
169+
170+
// CHECK-NEXT: init(swiftToSwiftConvenience:) Sub
171+
// CHECK-NEXT: init(swiftToSwift:) Sub
172+
// CHECK-NEXT: init(swift:) Sub
173+
check(sub: 1) { Sub(swiftToSwiftConvenience: ()) }
174+
// CHECK-NEXT: init(objcToSwiftConvenience:) Sub
175+
// CHECK-NEXT: init(swiftToSwift:) Sub
176+
// CHECK-NEXT: init(swift:) Sub
177+
check(sub: 2) { Sub(objcToSwiftConvenience: ()) }
178+
// CHECK-NEXT: init(swiftToObjCConvenience:) Sub
179+
// CHECK-NEXT: init(objcToObjC:) Sub
180+
// CHECK-NEXT: init(objc:) Sub
181+
check(sub: 1) { Sub(swiftToObjCConvenience: ()) }
182+
// CHECK-NEXT: init(objcToObjCConvenience:) Sub
183+
// CHECK-NEXT: init(objcToObjC:) Sub
184+
// CHECK-NEXT: init(objc:) Sub
185+
check(sub: 1) { Sub(objcToObjCConvenience: ()) }
186+
187+
// Force ObjC dispatch without conforming Sub or Base to the protocol,
188+
// because it's possible that `required` perturbs things and we want to test
189+
// both ways.
190+
let SubAsObjC = unsafeBitCast(Sub.self as AnyObject,
191+
to: ForceObjCDispatch.Type.self)
192+
193+
// CHECK-NEXT: init(objc:) Sub
194+
check(sub: 1) { SubAsObjC.init(objc: ()) }
195+
// CHECK-NEXT: init(objcToSwift:) Sub
196+
// CHECK-NEXT: init(swift:) Sub
197+
check(sub: 2) { SubAsObjC.init(objcToSwift: ()) }
198+
// CHECK-NEXT: init(objcToObjC:) Sub
199+
// CHECK-NEXT: init(objc:) Sub
200+
check(sub: 1) { SubAsObjC.init(objcToObjC: ()) }
201+
// CHECK-NEXT: init(objcToSwiftConvenience:) Sub
202+
// CHECK-NEXT: init(swiftToSwift:) Sub
203+
// CHECK-NEXT: init(swift:) Sub
204+
check(sub: 2) { SubAsObjC.init(objcToSwiftConvenience: ()) }
205+
// CHECK-NEXT: init(objcToObjCConvenience:) Sub
206+
// CHECK-NEXT: init(objcToObjC:) Sub
207+
// CHECK-NEXT: init(objc:) Sub
208+
check(sub: 1) { SubAsObjC.init(objcToObjCConvenience: ()) }
209+
210+
// CHECK-NEXT: END
211+
print("END")
212+
}
213+
214+
main()
215+

0 commit comments

Comments
 (0)