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

/*@testedFeatures=warning,inference*/
library test;

main() {
  var /*@type=() -> Null*/ a = /*@returnType=Null*/ () {};
  var /*@type=() -> Null*/ b = /*@returnType=Null*/ () {
    return;
  };
  var /*@type=() -> Null*/ c = /*@returnType=Null*/ () {
    return null;
  };
  var /*@type=() -> int*/ d = /*@returnType=int*/ () {
    return 0;
  };
  var /*@type=(bool) -> Null*/ e = /*@returnType=Null*/ (bool b) {
    if (b) {
      return;
    } else {
      return;
    }
  };
  var /*@type=(bool) -> Null*/ f = /*@returnType=Null*/ (bool b) {
    if (b) {
      return;
    } else {
      return null;
    }
  };
  var /*@type=(bool) -> int*/ g = /*@returnType=int*/ (bool b) {
    if (b) {
      /*@warning=ReturnWithoutExpression*/ return;
    } else {
      return 0;
    }
  };
  var /*@type=(bool) -> Null*/ h = /*@returnType=Null*/ (bool b) {
    if (b) {
      return null;
    } else {
      return;
    }
  };
  var /*@type=(bool) -> Null*/ i = /*@returnType=Null*/ (bool b) {
    if (b) {
      return null;
    } else {
      return null;
    }
  };
  var /*@type=(bool) -> int*/ j = /*@returnType=int*/ (bool b) {
    if (b) {
      return null;
    } else {
      return 0;
    }
  };
  var /*@type=(bool) -> int*/ k = /*@returnType=int*/ (bool b) {
    if (b) {
      return 0;
    } else {
      /*@warning=ReturnWithoutExpression*/ return;
    }
  };
  var /*@type=(bool) -> int*/ l = /*@returnType=int*/ (bool b) {
    if (b) {
      return 0;
    } else {
      return null;
    }
  };
  var /*@type=(bool) -> int*/ m = /*@returnType=int*/ (bool b) {
    if (b) {
      return 0;
    } else {
      return 0;
    }
  };
}
