// 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() {}
