Triage language tests for void in DDC and analyzer
Change-Id: Ib72fa4515ac29b66d90b237739f97219b98acda2
Reviewed-on: https://dart-review.googlesource.com/67282
Commit-Queue: Leaf Petersen <leafp@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 9b6f9cf..3cd2978 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -5258,20 +5258,18 @@
return;
}
- // Anything can be returned to `dynamic`, or to `Future<dynamic>` in
- // an async function.
- if (toType.isDynamic) {
- return;
- }
-
- // Anything can be return to `Future<Null>` in an async function
- if (_inAsync && toType.isDartCoreNull) {
- return;
- }
-
- // If we're not in one of the `void` related special cases
- // just check assignability.
- if (!expectedType.isVoid && !fromType.isVoid) {
+ if (toType.isVoid) {
+ if (fromType.isVoid ||
+ fromType.isDynamic ||
+ fromType.isDartCoreNull ||
+ fromType.isBottom) {
+ return;
+ }
+ } else if (fromType.isVoid) {
+ if (toType.isDynamic || toType.isDartCoreNull || toType.isBottom) {
+ return;
+ }
+ } else {
var checkWithType = (!_inAsync)
? fromType
: _typeProvider.futureType.instantiate(<DartType>[fromType]);
@@ -5281,31 +5279,6 @@
}
}
- // Void related special cases. If the expression type flattens
- // to `void`, and the expected type doesn't, then it's an error.
- // Otherwise:
- if (toType.isVoid) {
- // In the case that the expected type is `void`
- if (expectedType.isVoid) {
- // Valid if the expression type is void, dynamic or Null
- if (expressionType.isVoid ||
- expressionType.isDynamic ||
- expressionType.isDartCoreNull ||
- expressionType.isBottom) {
- return;
- }
- } else {
- // The expected type is Future<void> or FutureOr<void>,
- // and the return is valid if the expression type flattens
- // to void, dynamic, or Null.
- if (fromType.isVoid ||
- fromType.isDynamic ||
- fromType.isDartCoreNull ||
- fromType.isBottom) {
- return;
- }
- }
- }
reportTypeError();
}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 493ee91..8a767d0 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -7,15 +7,15 @@
mixin_constructor_forwarding/optional_named_parameters_test/none: CompileTimeError # Issue 31543
mixin_constructor_forwarding/optional_positional_parameters_test/none: CompileTimeError # Issue 31543
-[ $compiler == dart2analyzer ]
-void/*: Skip # https://github.com/dart-lang/sdk/issues/34010
-invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34010
+[ $compiler == dart2analyzer && $fasta ]
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34011
+invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34011
[ $compiler == dart2js ]
void/*: Skip # https://github.com/dart-lang/sdk/issues/34011
invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34011
-[ $compiler == dartdevc || $compiler == dartdevk ]
+[ $compiler == dartdevk ]
void/*: Skip # https://github.com/dart-lang/sdk/issues/34012
invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34012
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 32596e6..2fca5c6 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -592,11 +592,31 @@
void/void_type_usage_test/async_use_in_await: CompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/final_local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/final_local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/final_local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/final_local_for_in2: MissingCompileTimeError
+void/void_type_usage_test/final_local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/sync_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/sync_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
web_int_literals_test/01: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 30ee5da..a9e587e 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -190,12 +190,38 @@
type_promotion_functions_test/14: CompileTimeError # Issue 30895
type_promotion_functions_test/none: CompileTimeError # Issue 30895
type_variable_scope_test/none: CompileTimeError
+void/generalized_void_syntax_test: CompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_function_types_test/none: CompileTimeError # Issue 30177
+void/void_type_usage_test/async_use_in_await: CompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/call_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/final_local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/final_local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/final_local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/final_local_for_in2: MissingCompileTimeError
+void/void_type_usage_test/final_local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/global_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
void/void_type_usage_test/param_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/paren_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/sync_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
+void/void_type_usage_test/sync_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
[ $compiler == dartdevk ]
additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
diff --git a/tests/language_2/void/void_type_usage_test.dart b/tests/language_2/void/void_type_usage_test.dart
index bdfeca3..a49a34a 100644
--- a/tests/language_2/void/void_type_usage_test.dart
+++ b/tests/language_2/void/void_type_usage_test.dart
@@ -125,7 +125,7 @@
f() ??= 3; //# call_use_in_conditional_assignment_left: compile-time error
Object xx; xx ??= f(); //# call_use_in_conditional_assignment_right: compile-time error
var ll = <int>[3]; ll[f()]; //# call_use_in_list_subscript: compile-time error
- var mm = <void, void>{}; mm[f()]; //# call_use_in_map_lookup: ok
+ var mm = <void, void>{}; mm[f()]; //# call_use_in_map_lookup: compile-time error
}
dynamic testVoidCallDynamic(void f()) {
@@ -179,7 +179,7 @@
x ??= 3; //# local_use_in_conditional_assignment_left: compile-time error
Object xx; xx ??= x; //# local_use_in_conditional_assignment_right: compile-time error
var ll = <int>[3]; ll[x]; //# local_use_in_list_subscript: compile-time error
- var mm = <void, void>{}; mm[x]; //# local_use_in_map_lookup: ok
+ var mm = <void, void>{}; mm[x]; //# local_use_in_map_lookup: compile-time error
}
dynamic testVoidLocalDynamic() {
@@ -234,7 +234,7 @@
x ??= 3; //# final_local_use_in_conditional_assignment_left: compile-time error
Object xx; xx ??= x; //# final_local_use_in_conditional_assignment_right: compile-time error
var ll = <int>[3]; ll[x]; //# final_local_use_in_list_subscript: compile-time error
- var mm = <void, void>{}; mm[x]; //# final_local_use_in_map_lookup: ok
+ var mm = <void, void>{}; mm[x]; //# final_local_use_in_map_lookup: compile-time error
}
dynamic testVoidFinalLocalDynamic() {
@@ -288,7 +288,7 @@
global ??= 3; //# global_use_in_conditional_assignment_left: compile-time error
Object xx; xx ??= global; //# global_use_in_conditional_assignment_right: compile-time error
var ll = <int>[3]; ll[global]; //# global_use_in_list_subscript: compile-time error
- var mm = <void, void>{}; mm[global]; //# global_use_in_map_lookup: ok
+ var mm = <void, void>{}; mm[global]; //# global_use_in_map_lookup: compile-time error
}
dynamic testVoidGlobalDynamic() {
@@ -540,7 +540,7 @@
(x) ??= 3; //# paren_use_in_conditional_assignment_left: compile-time error
Object xx; xx ??= (x); //# paren_use_in_conditional_assignment_right: compile-time error
var ll = <int>[3]; ll[(x)]; //# paren_use_in_list_subscript: compile-time error
- var mm = <void, void>{}; mm[(x)]; //# paren_use_in_map_lookup: ok
+ var mm = <void, void>{}; mm[(x)]; //# paren_use_in_map_lookup: compile-time error
}
dynamic testParenthesizedDynamic() {