c430a3b4aa
I previously thought that the only possible situation where a switch statement over a valid type could be exhaustive without containing any cases was if the scrutinee type was the empty record type (`()`). But that isn't true at all: - The empty record type is inhabited by empty record objects, so such a switch statement would not be exhaustive after all. - It is possible for the user to create a type that can be exhaustively switched over with zero cases: by creating an abstract sealed class without any subclasses. In the latter case, I think it makes the most sense to treat the code after the switch as unreachable, because that's the normal behaviour of a switch over an exhaustive type with no `break`s. It is sound to do so because the type is uninhabited, therefore the body of the switch statement itself will never be reached. Bug: https://github.com/dart-lang/sdk/issues/50419 Change-Id: Ibc0a21226f25ae155db994343874354d5b8e4f7d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274621 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Paul Berry <paulberry@google.com>