// Copyright (c) 2019, 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=inference*/
T map<T>(T Function() f1, T Function() f2) {}

id<T>(T t) => t;

Null foo() => null;

main() {
  /*@ typeArgs=Null* */ map(/*@ returnType=Null* */ () {},
      /*@ returnType=<BottomType> */ () => throw "hello");
  /*@ typeArgs=Null* */ map(/*@ returnType=<BottomType> */ () => throw "hello",
      /*@ returnType=Null* */ () {});
  Null Function() f = /*@ returnType=Null* */ () {};
  /*@ typeArgs=Null* */ map(
      foo, /*@ returnType=<BottomType> */ () => throw "hello");
  /*@ typeArgs=Null* */ map(
      /*@ returnType=<BottomType> */ () => throw "hello", foo);
  /*@ typeArgs=Null* */ map(/*@ returnType=Null* */ () {
    return null;
  }, /*@ returnType=<BottomType> */ () => throw "hello");

  /*@ typeArgs=Null* */ map(/*@ returnType=<BottomType> */ () => throw "hello",
      /*@ returnType=Null* */ () {
    return null;
  });
  /*@ typeArgs=() ->* Null* */ id(/*@ returnType=Null* */ () {});
}
