library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/exhaustiveness/sealed_cast.dart:15:24: Error: The type 'M' is not exhaustively matched by the switch cases since it doesn't match 'C()'.
//  - 'M' is from 'pkg/front_end/testcases/patterns/exhaustiveness/sealed_cast.dart'.
// Try adding a wildcard pattern or cases that match 'C()'.
// method(M m) => switch (m) {
//                        ^
//
import self as self;
import "dart:core" as core;

abstract sealed class M extends core::Object {
  synthetic constructor •() → self::M
    : super core::Object::•()
    ;
}
class A extends self::M {
  synthetic constructor •() → self::A
    : super self::M::•()
    ;
}
class B extends self::M {
  synthetic constructor •() → self::B
    : super self::M::•()
    ;
}
class C extends self::M {
  synthetic constructor •() → self::C
    : super self::M::•()
    ;
}
class D extends core::Object implements self::A, self::B {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
}
static method method(self::M m) → dynamic
  return block {
    core::int #t1;
    final synthesized self::M #0#0 = m;
    #L1:
    {
      {
        if(let final self::B #t2 = #0#0 as self::B in (#0#0 as self::B) is self::A) {
          #t1 = 0;
          break #L1;
        }
      }
      {
        if(true) {
          #t1 = 1;
          break #L1;
        }
      }
    }
  } =>#t1;
static method main() → dynamic {
  self::method(new self::B::•());
  self::method(new self::D::•());
}
