SILGen/Sema: Avoid diagnosing @unknown default switch cases as unreachable #72213
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Suppose you have an exhaustive switch statement which matches all the cases of a Swift enum defined in a different module named
External
:If
External
is compiled with library evolution andSomeEnum
is not frozen, then the compiler will warn:You add an
@unknown default
to the switch to resolve this warning. Now suppose in another build configuration,External
is built without library evolution. The compiler will complain about the unreachability of the default case:These contradictory compiler diagnostics encourage the developer to change the code in a way that will cause a diagnostic in the other configuration. Developers should have the tools to address all warning diagnostics in a reasonable fashion and this is a case where the compiler makes that especially difficult. Given that writing
@unknown default
instead ofdefault
is a very intentional action that would be the result of addressing the library evolution configuration, it seems reasonable to suppress theDefault will never be executed
diagnostic.