blob: c8d44f05f5ffe88675383eba7c63c7c895c6ba62 [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.
/// 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() {}