// 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.

// @dart=2.6

/*@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? */ () {});
}
