library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart:23:5: Error: Switch case may fall through to the next case.
//     case -42: // Error.
//     ^
//
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  method foo(core::int x, core::bool b) → dynamic {
    switch(x) {
      #L1:
      case #C1:
        {
          this.{self::A::neverReturn}(){() → Never};
        }
      #L2:
      default:
        {
          self::bar();
        }
    }
  }
  abstract method neverReturn() → Never;
}
static method bar() → dynamic {}
static method foo(core::int x, core::bool b) → dynamic {
  switch(x) {
    #L3:
    case #C1:
      {
        b ?{Never} throw "hest" : throw "fisk";
      }
    #L4:
    case #C2:
      {
        self::bar();
      }
    #L5:
    default:
      {
        self::bar();
      }
  }
}
static method main() → dynamic {}

constants  {
  #C1 = 42
  #C2 = -42
}
