blob: c38b9ad27997ffc5f78946ec17e5595a2bb46e8f [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// SharedOptions=--enable-experiment=patterns,records
/// Test that switch expressions are allowed to be empty, and that they have the
/// proper static type behavior.
///
/// Note that the runtime behavior only matters in mixed-mode programs, since in
/// fully sound programs an empty switch expression will be unreachable.
import '../static_type_helper.dart';
// Note: no subtypes.
sealed class A {}
Never emptySwitchOnSealedClass(A a) =>
(switch (a) { })..expectStaticType<Never>();
void unreachableAfterEmptySwitch(A a, int? i) {
if (i == null) {
(switch (a) { });
// Flow analysis should understand that since `switch (a) {}` has type
// `Never`, the rest of this block is unreachable.
}
// Hence, `i` is promoted to non-nullable.
i.isEven;
}
main() {}