Skip to content

Commit c54e788

Browse files
committed
ColdBlockInfo: add another test case
1 parent 35e426f commit c54e788

File tree

1 file changed

+90
-1
lines changed

1 file changed

+90
-1
lines changed

test/SILOptimizer/cold_block_info.swift

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
// RUN: %FileCheck %s --input-file=%t/debug.txt
88

9-
enum MyError: Error { case err; case number(Int) }
9+
public enum MyError: Error { case err; case number(Int) }
1010

1111
@inline(never)
1212
func dump(_ s: String) { print(s) }
@@ -129,3 +129,92 @@ public func pleasePleasePlease(_ i: Int) throws {
129129
throw MyError.number(i)
130130
}
131131
}
132+
133+
134+
// CHECK-LABEL: --> Final for $s4main21nestedTreesOfThrowingyySi_S3itAA7MyErrorOYKF | converged after 1 iters
135+
// CHECK-NOT: bb0
136+
// CHECK: }
137+
public func nestedTreesOfThrowing(_ i: Int, _ j: Int, _ k: Int, _ l: Int) throws(MyError) {
138+
switch i {
139+
case 0:
140+
switch j {
141+
case 0:
142+
switch k {
143+
case 0:
144+
switch l {
145+
case 0: throw MyError.number(0)
146+
case 1: throw MyError.number(1)
147+
default: return // <-- the one non-throwing case that prevents bb0 from being cold!
148+
}
149+
case 1:
150+
switch l {
151+
case 0: throw MyError.number(1)
152+
case 1: throw MyError.number(2)
153+
default: throw MyError.err
154+
}
155+
default:
156+
throw MyError.err
157+
}
158+
case 1:
159+
switch k {
160+
case 0:
161+
switch l {
162+
case 0: throw MyError.number(1)
163+
case 1: throw MyError.number(2)
164+
default: throw MyError.err
165+
}
166+
case 1:
167+
switch l {
168+
case 0: throw MyError.number(2)
169+
case 1: throw MyError.number(3)
170+
default: throw MyError.err
171+
}
172+
default:
173+
throw MyError.err
174+
}
175+
default:
176+
throw MyError.err
177+
}
178+
case 1:
179+
switch j {
180+
case 0:
181+
switch k {
182+
case 0:
183+
switch l {
184+
case 0: throw MyError.number(1)
185+
case 1: throw MyError.number(2)
186+
default: throw MyError.err
187+
}
188+
case 1:
189+
switch l {
190+
case 0: throw MyError.number(2)
191+
case 1: throw MyError.number(3)
192+
default: throw MyError.err
193+
}
194+
default:
195+
throw MyError.err
196+
}
197+
case 1:
198+
switch k {
199+
case 0:
200+
switch l {
201+
case 0: throw MyError.number(2)
202+
case 1: throw MyError.number(3)
203+
default: throw MyError.err
204+
}
205+
case 1:
206+
switch l {
207+
case 0: throw MyError.number(3)
208+
case 1: throw MyError.number(4)
209+
default: throw MyError.err
210+
}
211+
default:
212+
throw MyError.err
213+
}
214+
default:
215+
throw MyError.err
216+
}
217+
default:
218+
throw MyError.err
219+
}
220+
}

0 commit comments

Comments
 (0)