// Copyright (c) 2011, 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 An if statement of the form if (b) s1 else s2.
/// If:
/// • b shows that a variable v has type T .
/// • v is not potentially mutated in s1 or within a closure.
/// • If the variable v is accessed by a closure in s1 then the variable v is
///   not potentially mutated anywhere in the scope of v.
/// Then the type of v is known to be T in s1.
/// @description Checks that if b shows that v has type T, v is not potentially
/// mutated in s1 or within a closure, v is captured by closure in s1, but v is
/// potentially mutated elsewhere in its scope, then the type of v is not known
/// to be T in s1.
/// @author ilya


class C {}
class D extends C {
  f() {}
}

test(C x) {
  var closure;

  if (x is D)
    closure = () => x.f(); // will throw
//                    ^
// [analyzer] unspecified
// [cfe] unspecified

  x = new C();
  closure();
}

main() {
  test(new D());
}
