36f0c3209a
Change-Id: I7cfc51c22e98cc368ec59af3a7125f1d0c0419d8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407140 Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Lasse Nielsen <lrn@google.com>
40 lines
1.6 KiB
Dart
40 lines
1.6 KiB
Dart
// 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.
|
|
|
|
// Test for F-Bounded Quantification.
|
|
|
|
class FBound<F extends FBound<F>> {}
|
|
|
|
class Bar extends FBound<Bar> {}
|
|
|
|
class SubBar extends Bar {}
|
|
|
|
class Baz<T> extends FBound<Baz<T>> {}
|
|
|
|
class SubBaz<T> extends Baz<T> {}
|
|
|
|
main() {
|
|
FBound<Bar> fb = new FBound<Bar>();
|
|
FBound<SubBar> fsb = new FBound<SubBar>();
|
|
// [error column 3]
|
|
// [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
|
|
// ^^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
|
|
// ^
|
|
// [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
|
|
// ^^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
|
|
|
|
FBound<Baz<Bar>> fbb = new FBound<Baz<Bar>>();
|
|
FBound<SubBaz<Bar>> fsbb = new FBound<SubBaz<Bar>>();
|
|
// [error column 3]
|
|
// [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
|
|
// ^^^^^^^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
|
|
// ^
|
|
// [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
|
|
// ^^^^^^^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
|
|
}
|