diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t01.dart
index 275e95d..c1128d5 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t01.dart
@@ -28,6 +28,6 @@
 
 main() {
   var v = C.constr ;
-  v(1);
-  Expect.isTrue(C.called);
+  C c = v(1);
+  Expect.isTrue(c.called);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t02.dart
index 881a730..6da519d 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t02.dart
@@ -29,6 +29,6 @@
 
 main() {
   var v = C.constr;
-  v(1);
-  Expect.isTrue(C.called);
+  C c = v(1);
+  Expect.isTrue(c.called);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t03.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t03.dart
index b91597f..81f1892 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t03.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A01_t03.dart
@@ -29,6 +29,6 @@
 
 main() {
   var v = C<int>.constr;
-  v(1);
+  C c = v(1);
   Expect.isTrue(C.called);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
index 26c94f7..5120625 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
@@ -16,17 +16,11 @@
 import "../../Utils/expect.dart";
 
 class C {
-  static bool called = false;
-
   C() {}
-
-  C.constr() {
-    called = true;
-  }
+  C.constr() {}
 }
 
 main() {
-  Expect.isTrue(C.constr@tearoff is C Function());
-  C c1 = C.constr@tearoff();
-  Expect.isTrue(C.called);
+  Expect.isTrue(C.constr is C Function());
+  Expect.isTrue(C.new is C Function());
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
index 2518881..0483602 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
@@ -16,21 +16,17 @@
 import "../../Utils/expect.dart";
 
 class C<T> {
-  static int called = 0;
-
   C() {}
-
-  C.constr(expected) {
-    Expect.equals(expected, T);
-    called++;
-  }
+  C.constr(T t) {}
 }
 
 main() {
-  Expect.isTrue(C.constr@tearoff is C Function<dynamic>(dynamic));
-  C c = C.constr@tearoff(dynamic);
-  Expect.equals(1, C.called);
+  Expect.isTrue(C.constr is C Function<dynamic>(dynamic));
+  Expect.isTrue(C.new is C Function<dynamic>(dynamic));
 
-  C c1 = C<int>.constr@tearoff(int);
-  Expect.equals(2, C.called);
+  Expect.isTrue(C<int>.constr is C Function<int>(int));
+  Expect.isTrue(C<int>.new is C Function<int>());
+
+  Expect.isTrue(C.constr<int> is C Function<int>(int));
+  Expect.isTrue(C.new<int> is C Function<int>());
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t01.dart
index f9721b7..23440c7 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t01.dart
@@ -16,18 +16,18 @@
 }
 
 main() {
-  var v = C<int>.constr;
-//         ^
+  var v1 = C<int>.constr;
+//          ^
 // [analyzer] unspecified
 // [cfe] unspecified
 
-  var v = C<dynamic>.constr;
-//         ^
+  var v2 = C<dynamic>.constr;
+//          ^
 // [analyzer] unspecified
 // [cfe] unspecified
 
-  var v = C<String, int, int>.constr;
-//         ^
+  var v3 = C<String, int, int>.constr;
+//          ^
 // [analyzer] unspecified
 // [cfe] unspecified
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart
index 09038c4..e6dea21 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart
@@ -28,22 +28,22 @@
 
 main() {
   var v1 = C.constr;
-  v1(dynamic);
-  Expect.equals(1, C.called);
+  C c1 = v1(dynamic);
+  Expect.equals(1, c1.called);
 
   var v2 = C<dynamic>.constr;
-  v2(dynamic);
-  Expect.equals(2, C.called);
+  C c2 = v2(dynamic);
+  Expect.equals(2, c2.called);
 
   var v3 = (C<dynamic>).constr;
-  v3(dynamic);
-  Expect.equals(3, C.called);
+  C c3 = v3(dynamic);
+  Expect.equals(3, c3.called);
 
-  var v3 = (C<int>).constr;
-  v3(int);
-  Expect.equals(3, C.called);
+  var v4 = (C<int>).constr;
+  C<int> c4 = v4(int);
+  Expect.equals(4, c4.called);
 
-  var v3 = (C<num>).constr;
-  v3<int>(int);
-  Expect.equals(3, C.called);
+  var v5 = (C<num>).constr;
+  C c5 = v5<int>(int);
+  Expect.equals(5, c5.called);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t03.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t03.dart
new file mode 100644
index 0000000..2bc0358
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t03.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion If [C] is not generic, then [<typeParams>] and [<typeArgs>] are
+/// omitted. Otherwise <typeParams> are exactly the same type parameters as
+/// those of the class declaration of [C] (including bounds), and [<typeArgs>]
+/// applies those type parameter variables directly as type arguments to [C].
+///
+/// @description Checks that for generic class <typeParams> are exactly the same
+/// type parameters as those of the class declaration of [C] (including bounds),
+/// and [<typeArgs>] applies those type parameter variables directly as type
+/// arguments to [C] - test case with the several type parameters.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C<T1, T2 extends num, T3 extends String> {
+  static int called = 0;
+
+  C() {}
+
+  C.constr(exp1, exp2, exp3) {
+    Expect.equals(exp1, T1);
+    Expect.equals(exp2, T2);
+    Expect.equals(exp3, T3);
+    called++;
+  }
+}
+
+main() {
+  var v1 = C.constr;
+  C c1 = v1(dynamic, num, String);
+  Expect.equals(1, c1.called);
+
+  var v2 = C<dynamic, num, String>.constr;
+  C c2 = v2(dynamic, num, String);
+  Expect.equals(2, c2.called);
+
+  var v3 = C<dynamic, int, String>.constr;
+  C c3 = v3(dynamic, int, String);
+  Expect.equals(3, c3.called);
+
+  var v4 = (C<dynamic, int, String>).constr;
+  C<dynamic, int, String> c4 = v4(int);
+  Expect.equals(4, c4.called);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t04.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t04.dart
new file mode 100644
index 0000000..a62d15b
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t04.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion If [C] is not generic, then [<typeParams>] and [<typeArgs>] are
+/// omitted. Otherwise <typeParams> are exactly the same type parameters as
+/// those of the class declaration of [C] (including bounds), and [<typeArgs>]
+/// applies those type parameter variables directly as type arguments to [C].
+///
+/// @description Checks that for generic class <typeParams> are exactly the same
+/// type parameters as those of the class declaration of [C] (including bounds),
+/// and [<typeArgs>] applies those type parameter variables directly as type
+/// arguments to [C] - test case with the different type parameter numbers.
+/// @author iarkh@unipro.ru
+
+class C<T1, T2 extends num, T3 extends String> {
+  C.constr(exp1, exp2, exp3) {}
+}
+
+main() {
+  C<dynamic>.constr;
+//         ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C<dynamic, num>.constr;
+//              ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C<dynamic, num, String, dynamic>.constr;
+//                      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t05.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t05.dart
new file mode 100644
index 0000000..d0b935c
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t05.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion If [C] is not generic, then [<typeParams>] and [<typeArgs>] are
+/// omitted. Otherwise <typeParams> are exactly the same type parameters as
+/// those of the class declaration of [C] (including bounds), and [<typeArgs>]
+/// applies those type parameter variables directly as type arguments to [C].
+///
+/// @description Checks that for generic class <typeParams> are exactly the same
+/// type parameters as those of the class declaration of [C] (including bounds),
+/// and [<typeArgs>] applies those type parameter variables directly as type
+/// arguments to [C] - test incorrect type parameters.
+/// @author iarkh@unipro.ru
+
+class C<T1 extends int> {
+  C.constr(exp1, exp2, exp3) {}
+}
+
+main() {
+  C<String>.constr;
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C<num>.constr;
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C<Null>.constr;
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t06.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t06.dart
new file mode 100644
index 0000000..8e9718a
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t06.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion If [C] is not generic, then [<typeParams>] and [<typeArgs>] are
+/// omitted. Otherwise <typeParams> are exactly the same type parameters as
+/// those of the class declaration of [C] (including bounds), and [<typeArgs>]
+/// applies those type parameter variables directly as type arguments to [C].
+///
+/// @description Checks that for generic class <typeParams> are exactly the same
+/// type parameters as those of the class declaration of [C] (including bounds),
+/// and [<typeArgs>] applies those type parameter variables directly as type
+/// arguments to [C] - test incorrect type arguments.
+/// @author iarkh@unipro.ru
+
+class C<T> {
+  C.constr() {}
+}
+
+main() {
+  var v = C<String>.constr;
+  v<int>();
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart
new file mode 100644
index 0000000..13d6cd9
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  C.constr1() {}
+  C.constr2(int i) {}
+  C.constr3(i) {}
+  C.constr4(int i, String j, List<int> l) {}
+  C.constr5(i, j, k) {}
+}
+
+main() {
+  C Function() v1 = C.constr1;
+  Expect.isTrue(v1 is C Function());
+  v1();
+
+  var v2 = C.constr2;
+  Expect.isTrue(v2 is C Function(int));
+  v2(14);
+
+  var v3 = C.constr3;
+  Expect.isTrue(v3 is C Function(dynamic));
+  v3(0);
+  v3(null);
+
+  var v4 = C.constr4;
+  Expect.isTrue(v4 is C Function(int, String, List<int>));
+  v4(1, "123", [1, 2, 3]);
+
+  var v5 = C.constr5;
+  Expect.isTrue(v5 is C Function(dynamic, dynamic, dynamic));
+  v5(1, "123", [1, 2, 3]);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t02.dart
new file mode 100644
index 0000000..62156a2
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t02.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that [params] is exactly the same parameter
+/// list test constructor without arguments.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr() {}
+}
+
+main() {
+  C Function() v1 = C.constr;
+
+  C Function(int) v2 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(dynamic) v3 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function([int]) v4 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function({String s = "12345"}) v5 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t03.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t03.dart
new file mode 100644
index 0000000..bf7f5ba
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t03.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that [params] is exactly the same parameter
+/// list - test case with one [int] argument.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr(num i) {}
+}
+
+main() {
+  C Function(num) v = C.constr;
+
+  C Function(int) v1 = C.constr;
+
+  C Function() v2 = C.constr;
+//                    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(dynamic) v3 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(Object) v4 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(Object?) v5 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(String) v6 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(num, int) v7 = C.constr;
+//                            ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(Never) v8 = C.constr;
+
+  C Function(Null) v9 = C.constr;
+//                            ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t04.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t04.dart
new file mode 100644
index 0000000..0121c72
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t04.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that [params] is exactly the same parameter
+/// list - test case with one [dynamic] argument.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr(i) {}
+}
+
+main() {
+  C Function(dynamic) v1 = C.constr;
+
+  C Function() v2 = C.constr;
+//                    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(dynamic, dynamic) v3 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t05.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t05.dart
new file mode 100644
index 0000000..f964f80
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t05.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that [params] is exactly the same parameter
+/// list - test case with several argument.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr(int i, String j, List<int> l) {}
+}
+
+main() {
+  C Function(int, String, List<int>) v1 = C.constr;
+
+  C Function(int) v2 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(int, String) v3 = C.constr3;
+//                      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(int, String, List) v4 = C.constr;
+//                        ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(int, String, List<int>, List) v5 = C.constr;
+//                                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(dynamic, dynamic, dynamic) v6 = C.constr;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart
new file mode 100644
index 0000000..19f6838
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that initializing formals are represented by normal
+/// parameters with the same name and type.
+
+import "../../Utils/expect.dart";
+
+class C {
+  int x;
+  dynamic y;
+  C.name(this.x, this.y);
+}
+
+dynamic d = 0.5;
+
+main() {
+  var v = C.name;
+  Expect.isTrue(v is C Function(int x, dynamic y));
+  v(42, "I am strong");
+
+  Expect.throws(() { v(d, "test"); });
+  Expect.throws(() { v(1, d); });
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t07.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t07.dart
new file mode 100644
index 0000000..903ace8
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t07.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that initializing formals are represented by
+/// normal parameters with the same name and type.
+
+class C {
+  int x;
+  dynamic y;
+  C.name(this.x, this.y);
+}
+
+main() {
+  C Function(int x, dynamic y) f1 = C.name;
+
+  C Function(num x, dynamic y) f2 = C.name;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function() f3 = C.name;
+//                    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C Function(int, dynamic, void) f4 = C.name;
+//                                      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t08.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t08.dart
new file mode 100644
index 0000000..c3fe4be
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t08.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that initializing formals are represented by
+/// normal parameters with the same name and type.
+
+class C {
+  int x;
+  dynamic y;
+  C.name(this.x, this.y);
+}
+
+main() {
+  var v = C.name;
+
+  v();
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(0, 1);
+//     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(0);
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(0, "incorrect line", 12);
+//                     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart
new file mode 100644
index 0000000..f01e99a
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// named parameters
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int ii = 0;
+  int? jj = 0;
+  String ss = "";
+
+  C.constr(int i, {int? j, String s = "testme"}) {
+    ii = i;
+    jj = j;
+    ss = s;
+  }
+
+  void check(exp1, exp2, exp3) {
+    Expect.equals(exp1, ii);
+    Expect.equals(exp2, jj);
+    Expect.equals(exp3, ss);
+  }
+}
+
+main() {
+  var v = C.constr;
+  Expect.isTrue(v is C Function(int i, {int? j, String s}));
+
+  C c1 = v(1);
+  c1.check(1, null, "testme");
+
+  C c2 = v(12, j:90);
+  c2.check(12, 90, "testme");
+
+  C c3 = v(12, s: "stop");
+  c3.check(12, null, "stop");
+
+  C c4 = v(12, s: "", j:90);
+  c2.check(12, 90, "");
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart
new file mode 100644
index 0000000..7293a54
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that initializing formals are represented by normal
+/// parameters with the same name and type - test named parameters.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int i = 0;
+  int? j = 0;
+  String s = "";
+
+  C.constr(this.i, {this.j, this.s = "default"});
+
+  void check(exp1, exp2, exp3) {
+    Expect.equals(exp1, i);
+    Expect.equals(exp2, j);
+    Expect.equals(exp3, s);
+  }
+}
+
+main() {
+  var v = C.constr;
+  Expect.isTrue(v is C Function(int i, {int? j, String s}));
+
+  C c1 = v(1);
+  c1.check(1, null, "testme");
+
+  C c2 = v(12, j:90);
+  c2.check(12, 90, "testme");
+
+  C c3 = v(12, s: "stop");
+  c3.check(12, null, "stop");
+
+  C c4 = v(12, s: "", j:90);
+  c2.check(12, 90, "");
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t11.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t11.dart
new file mode 100644
index 0000000..24800d7
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t11.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// incorrect named arguments dynamically.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int ii = 0;
+  int? jj = 0;
+  String ss = "";
+
+  C.constr(int i, {int? j, String s = "testme"}) {
+    ii = i;
+    jj = j;
+    ss = s;
+  }
+
+  void check(exp1, exp2, exp3) {
+    Expect.equals(exp1, ii);
+    Expect.equals(exp2, jj);
+    Expect.equals(exp3, ss);
+  }
+}
+
+dynamic d = 1.5;
+
+main() {
+  var v = C.constr;
+
+  Expect.throws(() { v(1, j: d); });
+  Expect.throws(() { v(1, s: d); });
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t12.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t12.dart
new file mode 100644
index 0000000..41f8116
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t12.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// incorrect named arguments statically.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr({int? j, String s = "testme"}) {}
+}
+
+main() {
+  var v = C.constr;
+
+  v(incorrect: 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(j: "");
+//     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(s: null);
+//     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(1, "");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t13.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t13.dart
new file mode 100644
index 0000000..ae56e3a
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t13.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that initializing formals are represented by
+/// normal parameters with the same name and type - test named parameters.
+/// @author iarkh@unipro.ru
+
+class C {
+  int? j = 0;
+  String s = "";
+
+  C.constr({this.j, this.s = "default"});
+}
+
+main() {
+  var v = C.constr;
+
+  v(incorrect: 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(j: "");
+//     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(s: null);
+//     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(1, "");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart
new file mode 100644
index 0000000..8e3ce59
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// additional parameters
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int ii = 0;
+  int? jj = 0;
+  String ss = "";
+
+  C.constr(int i, [int? j, String s = "testme"]) {
+    ii = i;
+    jj = j;
+    ss = s;
+  }
+
+  void check(exp1, exp2, exp3) {
+    Expect.equals(exp1, ii);
+    Expect.equals(exp2, jj);
+    Expect.equals(exp3, ss);
+  }
+}
+
+main() {
+  var v = C.constr;
+  Expect.isTrue(v is C Function(int i, {int? j, String s}));
+
+  C c1 = v(1);
+  c1.check(1, null, "testme");
+
+  C c2 = v(12, 90);
+  c2.check(12, 90, "testme");
+
+  C c3 = v(12, null, "stop");
+  c3.check(12, null, "stop");
+
+  C c4 = v(12, 90, "");
+  c2.check(12, 90, "");
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart
new file mode 100644
index 0000000..e2cdb26
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that initializing formals are represented by normal
+/// parameters with the same name and type - test additional parameters.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int i = 0;
+  int? j = 0;
+  String s = "";
+
+  C.constr(this.i, [this.j, this.s = "default"]);
+
+  void check(exp1, exp2, exp3) {
+    Expect.equals(exp1, i);
+    Expect.equals(exp2, j);
+    Expect.equals(exp3, s);
+  }
+}
+
+main() {
+  var v = C.constr;
+  Expect.isTrue(v is C Function(int i, [int? j, String s]));
+
+  C c1 = v(1);
+  c1.check(1, null, "testme");
+
+  C c2 = v(12, 90);
+  c2.check(12, 90, "testme");
+
+  C c3 = v(12, "stop");
+  c3.check(12, null, "stop");
+
+  C c4 = v(12, 90, "");
+  c2.check(12, 90, "");
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t16.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t16.dart
new file mode 100644
index 0000000..7b06c2a
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t16.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// incorrect additional arguments dynamically.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int ii = 0;
+  int? jj = 0;
+  String ss = "";
+
+  C.constr(int i, [int? j, String s = "testme"]) {
+    ii = i;
+    jj = j;
+    ss = s;
+  }
+
+  void check(exp1, exp2, exp3) {
+    Expect.equals(exp1, ii);
+    Expect.equals(exp2, jj);
+    Expect.equals(exp3, ss);
+  }
+}
+
+dynamic d = 1.5;
+
+main() {
+  var v = C.constr;
+
+  Expect.throws(() { v(1, d); });
+  Expect.throws(() { v(1, 2, d); });
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t17.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t17.dart
new file mode 100644
index 0000000..0199f6c
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t17.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// incorrect additional arguments statically.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr([int? j, String s = "testme"]) {}
+}
+
+main() {
+  var v = C.constr;
+
+  v(incorrect: 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v("");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(null, 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v("", "");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t18.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t18.dart
new file mode 100644
index 0000000..66f9eda
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t18.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that initializing formals are represented by
+/// normal parameters with the same name and type - test additional parameters.
+/// @author iarkh@unipro.ru
+
+class C {
+  int? j = 0;
+  String s = "";
+
+  C.constr([this.j, this.s = "default"]);
+}
+
+main() {
+  var v = C.constr;
+
+  v(incorrect: 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v("");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(null, 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v("", "");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart
new file mode 100644
index 0000000..893844a
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// required named parameter.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int? ii;
+
+  C.constr({required int i}) {
+    ii = i;
+  }
+}
+
+dynamic d = 1.1;
+
+main() {
+  var v = C.constr;
+  Expect.isTrue(v is C Function({ required int i }));
+
+  C c1 = v(i: 1);
+  Expect.equals(1, c1.ii);
+
+  Expect.throws(() { v(i: d); });
+  Expect.throws(() { v(i: null as dynamic); });
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart
new file mode 100644
index 0000000..64b2bf0
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that initializing formals are represented by normal
+/// parameters with the same name and type - test required named parameter.
+/// @author iarkh@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class C {
+  int i = 0;
+  C.constr({required this.i});
+}
+
+dynamic d = 1.1;
+
+main() {
+  var v = C.constr;
+  Expect.isTrue(v is C Function({ required int i }));
+
+  C c1 = v(i: 1);
+  Expect.equals(1, c1.i);
+
+  Expect.throws(() { v(i: d); });
+  Expect.throws(() { v(i: null as dynamic); });
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t21.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t21.dart
new file mode 100644
index 0000000..0a59000
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t21.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks that [params] is exactly the same parameter list - test
+/// incorrect required named arguments statically.
+/// @author iarkh@unipro.ru
+
+class C {
+  C.constr({required int i}) {}
+}
+
+main() {
+  var v = C.constr;
+
+  v(incorrect: 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v();
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(i: null);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v("String");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(1, "");
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t22.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t22.dart
new file mode 100644
index 0000000..085f95e
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t22.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2021, 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.
+
+/// @assertion Similarly, [params] is almost exactly the same parameter list
+/// as the constructor [C.name], with the one exception that initializing
+/// formals are represented by normal parameters with the same name and type.
+/// All remaining properties of the parameters are the same as for the
+/// corresponding constructor parameter, including any default values, and
+/// [args] is an argument list passing those parameters to [C.name] directly as
+/// they are received.
+///
+/// @description Checks statically that initializing formals are represented by
+/// normal parameters with the same name and type - test required named
+/// parameter.
+/// @author iarkh@unipro.ru
+
+class C {
+  int? i;
+
+  C.constr({required this.i});
+}
+
+main() {
+  var v = C.constr;
+
+  v();
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(incorrect: 1);
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(i: "");
+//     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(i: null);
+
+  v("String here");
+//  ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  v(1, "");
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
