Skip to content

Commit 4301862

Browse files
committed
[embedded] Add a embedded Swift + typed throw test showcasing that we avoid existentials
1 parent e11965a commit 4301862

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

test/embedded/throw-typed.swift

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// RUN: %target-run-simple-swift(%S/Inputs/print.swift -enable-experimental-feature Embedded -enable-experimental-feature TypedThrows -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
2+
3+
// REQUIRES: executable_test
4+
// REQUIRES: optimized_stdlib
5+
// REQUIRES: VENDOR=apple
6+
// REQUIRES: OS=macosx
7+
8+
public enum MyError : Error, Equatable {
9+
case a
10+
case b
11+
case c(Int)
12+
}
13+
14+
extension Int : Error {}
15+
16+
public func throwing(which: Int) throws(MyError) -> Int {
17+
if which == 0 {
18+
throw MyError.a
19+
} else if which == 1 {
20+
throw MyError.b
21+
} else if which == 2 {
22+
throw MyError.c(42)
23+
}
24+
25+
return 123
26+
}
27+
28+
public func throwing2() throws(Int) {
29+
throw 42
30+
}
31+
32+
public func catching() {
33+
do {
34+
try throwing(which: 0)
35+
} catch let e as MyError {
36+
print(e == .a ? "OK1" : "???")
37+
}
38+
39+
do {
40+
try throwing(which: 1)
41+
} catch let e as MyError where e == .b {
42+
print(e == .b ? "OK2" : "???")
43+
} catch {
44+
print("???")
45+
}
46+
47+
do {
48+
try throwing(which: 2)
49+
} catch let e as MyError where e == .b {
50+
print("???")
51+
} catch {
52+
print("OK3")
53+
}
54+
55+
do {
56+
try throwing(which: 2)
57+
} catch let e as MyError {
58+
if case .c(let n) = e {
59+
print(n == 42 ? "OK4" : "???")
60+
} else {
61+
print("???")
62+
}
63+
} catch {
64+
print("???")
65+
}
66+
67+
do {
68+
try throwing(which: 3)
69+
print("OK5")
70+
} catch {
71+
print("???")
72+
}
73+
74+
do {
75+
try throwing2()
76+
} catch {
77+
print(error == 42 ? "OK6" : "???")
78+
}
79+
}
80+
81+
@main
82+
struct Main {
83+
static func main() {
84+
catching()
85+
}
86+
}
87+
88+
// CHECK: OK1
89+
// CHECK: OK2
90+
// CHECK: OK3
91+
// CHECK: OK4
92+
// CHECK: OK5
93+
// CHECK: OK6
94+
95+
// CHECK-NOT: ???

0 commit comments

Comments
 (0)