Handle covariant parameters in function types
Closes #33575
Change-Id: I743a951f5864ca538b588441ecba2680eba2081f
Reviewed-on: https://dart-review.googlesource.com/61924
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index b2584d4..2136ceb 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -439,11 +439,20 @@
}
List<DartType> parameterTypes = <DartType>[];
List<DartType> optionalParameterTypes = <DartType>[];
+
+ DartType getParameterType(ir.VariableDeclaration variable) {
+ if (variable.isCovariant || variable.isGenericCovariantImpl) {
+ // A covariant parameter has type `Object` in the method signature.
+ return commonElements.objectType;
+ }
+ return getDartType(variable.type);
+ }
+
for (ir.VariableDeclaration variable in node.positionalParameters) {
if (parameterTypes.length == node.requiredParameterCount) {
- optionalParameterTypes.add(getDartType(variable.type));
+ optionalParameterTypes.add(getParameterType(variable));
} else {
- parameterTypes.add(getDartType(variable.type));
+ parameterTypes.add(getParameterType(variable));
}
}
List<String> namedParameters = <String>[];
@@ -452,7 +461,7 @@
node.namedParameters.toList()..sort((a, b) => a.name.compareTo(b.name));
for (ir.VariableDeclaration variable in sortedNamedParameters) {
namedParameters.add(variable.name);
- namedParameterTypes.add(getDartType(variable.type));
+ namedParameterTypes.add(getParameterType(variable));
}
List<FunctionTypeVariable> typeVariables;
if (node.typeParameters.isNotEmpty && options.strongMode) {
diff --git a/tests/compiler/dart2js/model/type_substitution_test.dart b/tests/compiler/dart2js/model/type_substitution_test.dart
index a00a701..2844a00 100644
--- a/tests/compiler/dart2js/model/type_substitution_test.dart
+++ b/tests/compiler/dart2js/model/type_substitution_test.dart
@@ -108,10 +108,8 @@
ElementEnvironment elementEnvironment,
List<DartType> arguments,
List<DartType> parameters,
- String name1,
- String name2) {
- DartType type1 = getType(elementEnvironment, name1);
- DartType type2 = getType(elementEnvironment, name2);
+ DartType type1,
+ DartType type2) {
DartType subst = type1.subst(arguments, parameters);
Expect.equals(
type2, subst, "$type1.subst($arguments,$parameters)=$subst != $type2");
@@ -119,57 +117,7 @@
testTypeSubstitution() async {
var env = await TypeEnvironment.create(r"""
- typedef void Typedef1<X,Y>(X x1, Y y2);
- typedef void Typedef2<Z>(Z z1);
-
- class Class<T,S> {
- void void1() {}
- void void2() {}
- void dynamic1(dynamic a) {}
- void dynamic2(dynamic b) {}
- void int1(int a) {}
- void int2(int a) {}
- void String1(String a) {}
- void String2(String a) {}
- void ListInt1(List<int> a) {}
- void ListInt2(List<int> b) {}
- void ListT1(List<T> a) {}
- void ListT2(List<int> b) {}
- void ListS1(List<S> a) {}
- void ListS2(List<String> b) {}
- void ListListT1(List<List<T>> a) {}
- void ListListT2(List<List<int>> b) {}
- void ListRaw1(List a) {}
- void ListRaw2(List b) {}
- void ListDynamic1(List<dynamic> a) {}
- void ListDynamic2(List<dynamic> b) {}
- void MapIntString1(Map<T,S> a) {}
- void MapIntString2(Map<int,String> b) {}
- void MapTString1(Map<T,String> a) {}
- void MapTString2(Map<int,String> b) {}
- void MapDynamicString1(Map<dynamic,String> a) {}
- void MapDynamicString2(Map<dynamic,String> b) {}
- void TypeVarT1(T t1) {}
- void TypeVarT2(int t2) {}
- void TypeVarS1(S s1) {}
- void TypeVarS2(String s2) {}
- void Function1a(int a(String s1)) {}
- void Function2a(int b(String s2)) {}
- void Function1b(void a(T t1, S s1)) {}
- void Function2b(void b(int t2, String s2)) {}
- void Function1c(void a(dynamic t1, dynamic s1)) {}
- void Function2c(void b(dynamic t2, dynamic s2)) {}
- void Typedef1a(Typedef1<T,S> a) {}
- void Typedef2a(Typedef1<int,String> b) {}
- void Typedef1b(Typedef1<dynamic,dynamic> a) {}
- void Typedef2b(Typedef1<dynamic,dynamic> b) {}
- void Typedef1c(Typedef1 a) {}
- void Typedef2c(Typedef1 b) {}
- void Typedef1d(Typedef2<T> a) {}
- void Typedef2d(Typedef2<int> b) {}
- void Typedef1e(Typedef2<S> a) {}
- void Typedef2e(Typedef2<String> b) {}
- }
+ class Class<T,S> {}
""");
InterfaceType Class_T_S = env["Class"];
Expect.isNotNull(Class_T_S);
@@ -184,82 +132,89 @@
Expect.isNotNull(S);
Expect.isTrue(S.isTypeVariable);
- DartType intType = env['int']; //getType(compiler, "int1");
+ DartType intType = env['int'];
Expect.isNotNull(intType);
Expect.isTrue(intType.isInterfaceType);
- DartType StringType = env['String']; //getType(compiler, "String1");
+ DartType StringType = env['String'];
Expect.isNotNull(StringType);
Expect.isTrue(StringType.isInterfaceType);
+ ClassEntity ListClass = env.getElement('List');
+ ClassEntity MapClass = env.getElement('Map');
+
List<DartType> parameters = <DartType>[T, S];
List<DartType> arguments = <DartType>[intType, StringType];
- // TODO(johnniwinther): Create types directly from strings to improve
- // test readability.
-
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "void1", "void2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "dynamic1", "dynamic2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "int1", "int2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "String1", "String2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "ListInt1", "ListInt2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "ListT1", "ListT2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "ListS1", "ListS2");
- testSubstitution(env.elementEnvironment, arguments, parameters, "ListListT1",
- "ListListT2");
- testSubstitution(
- env.elementEnvironment, arguments, parameters, "ListRaw1", "ListRaw2");
testSubstitution(env.elementEnvironment, arguments, parameters,
- "ListDynamic1", "ListDynamic2");
+ const VoidType(), const VoidType());
testSubstitution(env.elementEnvironment, arguments, parameters,
- "MapIntString1", "MapIntString2");
- testSubstitution(env.elementEnvironment, arguments, parameters, "MapTString1",
- "MapTString2");
+ const DynamicType(), const DynamicType());
+ testSubstitution(
+ env.elementEnvironment, arguments, parameters, intType, intType);
+ testSubstitution(
+ env.elementEnvironment, arguments, parameters, StringType, StringType);
testSubstitution(env.elementEnvironment, arguments, parameters,
- "MapDynamicString1", "MapDynamicString2");
+ instantiate(ListClass, [intType]), instantiate(ListClass, [intType]));
+ testSubstitution(env.elementEnvironment, arguments, parameters,
+ instantiate(ListClass, [T]), instantiate(ListClass, [intType]));
+ testSubstitution(env.elementEnvironment, arguments, parameters,
+ instantiate(ListClass, [S]), instantiate(ListClass, [StringType]));
testSubstitution(
- env.elementEnvironment, arguments, parameters, "TypeVarT1", "TypeVarT2");
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ instantiate(ListClass, [
+ instantiate(ListClass, [T])
+ ]),
+ instantiate(ListClass, [
+ instantiate(ListClass, [intType])
+ ]));
testSubstitution(
- env.elementEnvironment, arguments, parameters, "TypeVarS1", "TypeVarS2");
- testSubstitution(env.elementEnvironment, arguments, parameters, "Function1a",
- "Function2a");
- testSubstitution(env.elementEnvironment, arguments, parameters, "Function1b",
- "Function2b");
- testSubstitution(env.elementEnvironment, arguments, parameters, "Function1c",
- "Function2c");
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ instantiate(ListClass, [const DynamicType()]),
+ instantiate(ListClass, [const DynamicType()]));
testSubstitution(
- env.elementEnvironment, arguments, parameters, "Typedef1a", "Typedef2a");
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ instantiate(MapClass, [intType, StringType]),
+ instantiate(MapClass, [intType, StringType]));
testSubstitution(
- env.elementEnvironment, arguments, parameters, "Typedef1b", "Typedef2b");
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ instantiate(MapClass, [T, StringType]),
+ instantiate(MapClass, [intType, StringType]));
testSubstitution(
- env.elementEnvironment, arguments, parameters, "Typedef1c", "Typedef2c");
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ instantiate(MapClass, [const DynamicType(), StringType]),
+ instantiate(MapClass, [const DynamicType(), StringType]));
+ testSubstitution(env.elementEnvironment, arguments, parameters, T, intType);
testSubstitution(
- env.elementEnvironment, arguments, parameters, "Typedef1d", "Typedef2d");
+ env.elementEnvironment, arguments, parameters, S, StringType);
testSubstitution(
- env.elementEnvironment, arguments, parameters, "Typedef1e", "Typedef2e");
-
- // Substitution in unalias.
- DartType Typedef2_int_String = getType(env.elementEnvironment, "Typedef2a");
- Expect.isNotNull(Typedef2_int_String);
- DartType Function_int_String = getType(env.elementEnvironment, "Function2b");
- Expect.isNotNull(Function_int_String);
- DartType unalias1 = Typedef2_int_String.unaliased;
- Expect.equals(Function_int_String, unalias1,
- '$Typedef2_int_String.unalias=$unalias1 != $Function_int_String');
-
- DartType Typedef1 = getType(env.elementEnvironment, "Typedef1c");
- Expect.isNotNull(Typedef1);
- DartType Function_dynamic_dynamic =
- getType(env.elementEnvironment, "Function1c");
- Expect.isNotNull(Function_dynamic_dynamic);
- DartType unalias2 = Typedef1.unaliased;
- Expect.equals(Function_dynamic_dynamic, unalias2,
- '$Typedef1.unalias=$unalias2 != $Function_dynamic_dynamic');
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ new FunctionType(intType, [StringType], [], [], [], []),
+ new FunctionType(intType, [StringType], [], [], [], []));
+ testSubstitution(
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ new FunctionType(const VoidType(), [T, S], [], [], [], []),
+ new FunctionType(
+ const VoidType(), [intType, StringType], [], [], [], []));
+ testSubstitution(
+ env.elementEnvironment,
+ arguments,
+ parameters,
+ new FunctionType(const VoidType(), [const DynamicType()], [], [], [], []),
+ new FunctionType(
+ const VoidType(), [const DynamicType()], [], [], [], []));
}
diff --git a/tests/compiler/dart2js/rti/data/call_typed_generic.dart b/tests/compiler/dart2js/rti/data/call_typed_generic.dart
index d53e00c..69a082c1 100644
--- a/tests/compiler/dart2js/rti/data/call_typed_generic.dart
+++ b/tests/compiler/dart2js/rti/data/call_typed_generic.dart
@@ -6,10 +6,12 @@
import 'package:meta/dart2js.dart';
/*kernel.class: A:needsArgs*/
-/*omit.class: A:needsArgs*/
/*strong.class: A:direct,explicit=[A.T],needsArgs*/
+/*omit.class: A:*/
class A<T> {
- /*element: A.call:needsSignature*/
+ /*kernel.element: A.call:needsSignature*/
+ /*strong.element: A.call:*/
+ /*omit.element: A.call:*/
call(T t) {}
}
diff --git a/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart b/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart
index 2a6bae7..cb5b8c4 100644
--- a/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart
+++ b/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart
@@ -6,10 +6,12 @@
import 'package:meta/dart2js.dart';
/*kernel.class: A:needsArgs*/
-/*omit.class: A:needsArgs*/
/*strong.class: A:direct,explicit=[A.T],needsArgs*/
+/*omit.class: A:*/
class A<T> {
- /*element: A.call:needsSignature*/
+ /*kernel.element: A.call:needsSignature*/
+ /*strong.element: A.call:*/
+ /*omit.element: A.call:*/
call(T t) {}
}
diff --git a/tests/compiler/dart2js/rti/data/method_signatures.dart b/tests/compiler/dart2js/rti/data/method_signatures.dart
index 5a96cf0..b76455a 100644
--- a/tests/compiler/dart2js/rti/data/method_signatures.dart
+++ b/tests/compiler/dart2js/rti/data/method_signatures.dart
@@ -16,10 +16,12 @@
}
/*kernel.class: Class2:needsArgs*/
-/*omit.class: Class2:needsArgs*/
/*strong.class: Class2:direct,explicit=[Class2.T],needsArgs*/
+/*omit.class: Class2:*/
class Class2<T> {
- /*element: Class2.method4:needsSignature*/
+ /*kernel.element: Class2.method4:needsSignature*/
+ /*strong.element: Class2.method4:*/
+ /*omit.element: Class2.method4:*/
num method4(T n) => null;
}
diff --git a/tests/compiler/dart2js/rti/data/tear_off_generic.dart b/tests/compiler/dart2js/rti/data/tear_off_generic.dart
index d38ed3a..c8263c4 100644
--- a/tests/compiler/dart2js/rti/data/tear_off_generic.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off_generic.dart
@@ -3,10 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
/*kernel.class: A:needsArgs*/
-/*omit.class: A:needsArgs*/
/*strong.class: A:direct,explicit=[A.T],needsArgs*/
+/*omit.class: A:*/
class A<T> {
- /*element: A.m:needsSignature*/
+ /*kernel.element: A.m:needsSignature*/
+ /*strong.element: A.m:*/
+ /*omit.element: A.m:*/
void m(T t) {}
/*element: A.f:*/
diff --git a/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart b/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart
index 887e55f..7437085 100644
--- a/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart
@@ -3,9 +3,11 @@
// BSD-style license that can be found in the LICENSE file.
/*strong.class: A:direct,explicit=[A.T],needsArgs*/
-/*omit.class: A:needsArgs*/
+/*omit.class: A:*/
class A<T> {
- /*element: A.m:needsSignature*/
+ /*kernel.element: A.m:needsSignature*/
+ /*strong.element: A.m:*/
+ /*omit.element: A.m:*/
void m(T t) {}
/*element: A.f:*/
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index c178a3a..a79000f 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -58,17 +58,8 @@
field_type_check2_test/01: MissingRuntimeError
regress_23996_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
-[ $compiler == dart2js && $runtime != none ]
-covariant_tear_off_type_test: RuntimeError
-
[ $compiler == dart2js && $runtime != none && $checked ]
assert_with_message_test: RuntimeError
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_test: RuntimeError
-function_subtype_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast1_test: RuntimeError
-function_subtype_not1_test: RuntimeError
function_type/function_type0_test: RuntimeError # Issue 30476
function_type/function_type10_test: RuntimeError # Issue 30476
function_type/function_type12_test: RuntimeError # Issue 30476
@@ -140,8 +131,6 @@
function_type/function_type90_test: RuntimeError # Issue 30476
function_type/function_type96_test: RuntimeError # Issue 30476
function_type/function_type9_test: RuntimeError # Issue 30476
-function_type_alias2_test: RuntimeError
-function_type_alias4_test: RuntimeError
syncstar_covariant_type_test: RuntimeError # dart2js misplaces check in Iterator, not Iterable.
syncstar_dcall_type_test: RuntimeError # dart2js misplaces check in Iterator, not Iterable.
@@ -319,8 +308,6 @@
full_stacktrace2_test: RuntimeError # Issue 12698
full_stacktrace3_test: RuntimeError # Issue 12698
generalized_void_syntax_test: CompileTimeError # Issue #30176.
-generic_closure_test/01: RuntimeError
-generic_closure_test/none: RuntimeError
generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
generic_typedef_test: RuntimeError
@@ -516,13 +503,9 @@
[ $compiler == dart2js && !$checked && $fasta ]
bool_check_test: RuntimeError
bool_condition_check_test: RuntimeError
-forwarding_stub_tearoff_generic_test: RuntimeError
-forwarding_stub_tearoff_test: RuntimeError
-issue31596_implement_covariant_test: RuntimeError
issue31596_super_test/02: MissingCompileTimeError
issue31596_super_test/04: MissingCompileTimeError
issue31596_super_test/05: RuntimeError
-issue31596_test: RuntimeError
[ $compiler == dart2js && $fast_startup ]
library_env_test/has_mirror_support: Fail # mirrors not supported
@@ -570,7 +553,6 @@
constructor_redirect_indirect_cycle_test/01: Crash # Stack Overflow
constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
covariance_type_parameter_test/02: RuntimeError
-covariant_override/tear_off_type_test: RuntimeError
covariant_subtyping_test: Crash # Unsupported operation: Unsupported type parameter type node E.
cyclic_constructor_test/01: Crash # Stack Overflow
cyclic_type_test/00: RuntimeError
@@ -612,28 +594,15 @@
full_stacktrace1_test: RuntimeError # Issue 12698
full_stacktrace2_test: RuntimeError # Issue 12698
full_stacktrace3_test: RuntimeError # Issue 12698
-function_subtype3_test: RuntimeError
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_test: RuntimeError
-function_subtype_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast1_test: RuntimeError
function_subtype_inline2_test: RuntimeError
-function_subtype_not1_test: RuntimeError
function_subtype_setter0_test: RuntimeError
-function_type_alias2_test: RuntimeError
-function_type_alias4_test: RuntimeError
-generic_closure_test/01: RuntimeError
-generic_closure_test/none: RuntimeError
generic_function_bounds_test: RuntimeError
generic_function_dcall_test: RuntimeError
generic_function_type_as_type_argument_test/01: MissingCompileTimeError
generic_function_type_as_type_argument_test/02: MissingCompileTimeError
generic_instanceof2_test: RuntimeError
generic_is_check_test: RuntimeError
-generic_method_types_test/02: RuntimeError
generic_methods_bounds_test/02: MissingRuntimeError
-generic_methods_generic_class_tearoff_test: RuntimeError
generic_methods_generic_function_result_test/01: MissingCompileTimeError
generic_methods_unused_parameter_test: RuntimeError
generic_no_such_method_dispatcher_simple_test: CompileTimeError
@@ -779,7 +748,6 @@
regress_29784_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ok).
regress_29784_test/02: MissingCompileTimeError # Issue 29784
regress_30339_test: CompileTimeError
-runtime_type_function_test: RuntimeError
setter_no_getter_test/01: CompileTimeError
setter_override_test/00: MissingCompileTimeError
setter_override_test/03: MissingCompileTimeError
@@ -793,9 +761,6 @@
string_supertype_checked_test: CompileTimeError
super_bound_closure_test/none: CompileTimeError
super_call4_test/01: MissingCompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
super_test: RuntimeError
switch_bad_case_test/01: MissingCompileTimeError
switch_bad_case_test/02: MissingCompileTimeError
@@ -952,7 +917,6 @@
constructor_redirect_indirect_cycle_test/01: Crash # Stack Overflow
constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
covariance_type_parameter_test/02: RuntimeError
-covariant_override/tear_off_type_test: RuntimeError
covariant_subtyping_test: RuntimeError
cyclic_constructor_test/01: Crash # Issue 30856
cyclic_type_test/00: RuntimeError
@@ -1007,29 +971,16 @@
full_stacktrace1_test: RuntimeError # Issue 12698
full_stacktrace2_test: RuntimeError # Issue 12698
full_stacktrace3_test: RuntimeError # Issue 12698
-function_subtype3_test: RuntimeError
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_test: RuntimeError
-function_subtype_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast1_test: RuntimeError
function_subtype_inline2_test: RuntimeError
-function_subtype_not1_test: RuntimeError
function_subtype_setter0_test: RuntimeError
-function_type_alias2_test: RuntimeError
-function_type_alias4_test: RuntimeError
-generic_closure_test/01: RuntimeError
-generic_closure_test/none: RuntimeError
generic_function_bounds_test: RuntimeError
generic_function_dcall_test: RuntimeError
generic_function_type_as_type_argument_test/01: MissingCompileTimeError
generic_function_type_as_type_argument_test/02: MissingCompileTimeError
generic_instanceof2_test: RuntimeError
generic_is_check_test: RuntimeError
-generic_method_types_test/02: RuntimeError
generic_methods_bounds_test/01: MissingCompileTimeError
generic_methods_bounds_test/02: MissingRuntimeError
-generic_methods_generic_class_tearoff_test: RuntimeError
generic_methods_generic_function_result_test/01: MissingCompileTimeError
generic_methods_overriding_test/01: MissingCompileTimeError
generic_methods_recursive_bound_test/02: MissingCompileTimeError
@@ -1250,7 +1201,6 @@
regress_29784_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ok).
regress_29784_test/02: MissingCompileTimeError # Issue 29784
regress_30339_test: CompileTimeError
-runtime_type_function_test: RuntimeError
setter4_test: MissingCompileTimeError
setter_no_getter_test/01: CompileTimeError
setter_override_test/00: MissingCompileTimeError
@@ -1267,9 +1217,6 @@
string_supertype_checked_test: CompileTimeError
super_bound_closure_test/none: CompileTimeError
super_call4_test/01: MissingCompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
super_test: RuntimeError
switch_bad_case_test/01: MissingCompileTimeError
switch_bad_case_test/02: MissingCompileTimeError
@@ -1452,7 +1399,6 @@
constructor_redirect_indirect_cycle_test/01: Crash # Stack Overflow
constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
covariance_type_parameter_test/02: RuntimeError
-covariant_override/tear_off_type_test: RuntimeError
covariant_subtyping_test: RuntimeError
cyclic_constructor_test/01: Crash # Issue 30856
cyclic_type_variable_test/01: MissingCompileTimeError
@@ -1503,27 +1449,16 @@
full_stacktrace1_test: RuntimeError # Issue 12698
full_stacktrace2_test: RuntimeError # Issue 12698
full_stacktrace3_test: RuntimeError # Issue 12698
-function_subtype3_test: RuntimeError
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_test: RuntimeError
-function_subtype_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast1_test: RuntimeError
function_subtype_inline2_test: RuntimeError
-function_subtype_not1_test: RuntimeError
function_subtype_setter0_test: RuntimeError
-function_type_alias2_test: RuntimeError
-function_type_alias4_test: RuntimeError
generic_function_bounds_test: RuntimeError
generic_function_dcall_test: RuntimeError
generic_function_type_as_type_argument_test/01: MissingCompileTimeError
generic_function_type_as_type_argument_test/02: MissingCompileTimeError
generic_instanceof2_test: RuntimeError
generic_is_check_test: RuntimeError
-generic_method_types_test/02: RuntimeError
generic_methods_bounds_test/01: MissingCompileTimeError
generic_methods_bounds_test/02: MissingRuntimeError
-generic_methods_generic_class_tearoff_test: RuntimeError
generic_methods_generic_function_result_test/01: MissingCompileTimeError
generic_methods_overriding_test/01: MissingCompileTimeError
generic_methods_recursive_bound_test/02: MissingCompileTimeError
@@ -1751,7 +1686,6 @@
regress_29784_test/01: Crash # Issue 29784
regress_29784_test/02: MissingCompileTimeError # Issue 29784
regress_30339_test: CompileTimeError
-runtime_type_function_test: RuntimeError
setter4_test: MissingCompileTimeError
setter_no_getter_test/01: CompileTimeError
setter_override_test/00: MissingCompileTimeError
@@ -1863,7 +1797,7 @@
cyclic_type2_test: RuntimeError # Issue 31054
cyclic_type_test/0*: RuntimeError # Issue 31054
f_bounded_quantification5_test: RuntimeError # Issue 31054
-generic_closure_test: RuntimeError # Issue 31054
+generic_closure_test/01: RuntimeError # Uses runtimeType.toString()
mixin_mixin2_test: RuntimeError # Issue 31054
mixin_mixin3_test: RuntimeError # Issue 31054
mixin_mixin4_test: RuntimeError # Issue 31054
@@ -1872,3 +1806,4 @@
mixin_mixin_bound2_test: RuntimeError # Issue 31054
mixin_mixin_bound_test: RuntimeError # Issue 31054
mixin_mixin_type_arguments_test: RuntimeError # Issue 31054
+runtime_type_function_test: RuntimeError # Uses runtimeType.toString()