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

/**
 * a type [T] on the form qualified (for instance, [C] or [p.D]) which denotes a
 * generic class or parameterized type alias [G1] (that is, [T] is a raw type),
 * every type argument of [G1] has a simple bound.
 * @description Checks that simple bounds are correct for [typedef] with [X
 * extends num?] parameter (covariant)
 * @author iarkh@unipro.ru
 */

typedef G<X extends num> = void Function<Y extends X?>();

main() {
  G? source;
  void Function<X extends num?>()? target = source;

  void Function<X extends dynamic>()? target1 = source;
//                                              ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

  void Function<Null>()? target2 = source;
//                                ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

  void Function<Never>()? target3 = source;
//                                  ^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

  void Function<Num>()? target4 = source;
//                                ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

}
