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

/**
 * @assertion If N is an expression of the form E1.m1(E2), then:
 *
 *  Let before(E1) = before(N)
 *  Let before(E2) = after(E2)
 *  Let T be the static return type of the invocation
 *  If T <: Never then:
 *    Let null(N) = unreachable(before(N)).
 *    Let notNull(N) = unreachable(before(N)).
 *  Otherwise if T <: Null then:
 *    Let null(N) = before(N).
 *    Let notNull(N) = unreachable(before(N)).
 *  Otherwise if T is non-nullable then:
 *    Let null(N) = before(N).
 *    Let notNull(N) = unreachable(before(N)).
 *  Otherwise:
 *    Let null(N) = promote(x, Null, before(N))
 *    Let notNull(N) = promoteToNonNull(x, before(N))
 *
 * @description Checks reachability after method call. Test non-nullable return
 * type
 *
 * @author sgrekhov@unipro.ru
 * @issue 41985
 */
// Requirements=nnbd-weak
import "../../../../Utils/expect.dart";

class C {
  String m1() => "Lily was here";
}

main() {
  C c = new C();
  late int i;
  if (c.m1() == null) {
    i = 42;   // `i` is not definitely unassigned because in a weak mode the
              // condition may be true
  }
  try {
    i;
    Expect.fail("Error expected");
  } on Error catch(e) {
    // Ok
  }
}
