mirror of
https://github.com/apple/swift.git
synced 2026-03-04 18:24:35 +01:00
The logic here previously worked by computing the exit count by taking the parent count and subtracting any control flow that jumped out of the clauses. With `try` handling fixed, this no longer works correctly, since a `try` shouldn't be subtracted if the error is caught be one of the catches, as that's not actually leaving the statement. We could write the logic to determine where a `try` is jumping to, but the logic here is already pretty brittle, relying on being sprinkled in various different places. For now, let's take the more straightforward approach and handle do-catches the same way we handle switches, we initialize the exit counter to 0, and add on each exit count of each branch. This lets us re-use the existing CaseStmt handling logic. This doesn't necessarily produce the most optimal counter expressions, but I want to replace this all with a SILOptimizer pass anyway, which will be able to much more easily compute optimal counter expressions. rdar://100470244
120 KiB
120 KiB