// Copyright (c) 2020, 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.

// This test verifies that if a read is performed on a getter whose type is
// `Never`, the resulting code block is considered unreachable by flow analysis.

import 'package:expect/expect.dart';

Never get neverGetter => throw 'x';

void explicitNeverType(Object x, bool b) {
  if (x is! int) {
    if (b) {
      neverGetter; // Unreachable
    } else {
      return;
    }
  }
  // Since the read of `neverGetter` was unreachable, `x` is now promoted to
  // `int`.
  Expect.isTrue(x.isEven);
}

class TypeVarExtendsNever<T extends Never> {
  T get tGetter => throw 'x';

  void test(Object x, bool b) {
    if (x is! int) {
      if (b) {
        tGetter; // Unreachable
      } else {
        return;
      }
    }
    // Since the read of `tGetter` was unreachable, `x` is now promoted to
    // `int`.
    Expect.isTrue(x.isEven);
  }
}

main() {
  explicitNeverType(0, false);
  TypeVarExtendsNever<Never>().test(0, false);
}
