Triage language tests for void

Change-Id: I4fc4bc583f6fe25a0a083efc6b9cda5ef9ae5ceb
Reviewed-on: https://dart-review.googlesource.com/66521
Commit-Queue: Leaf Petersen <leafp@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
diff --git a/tests/language_2/invalid_returns/README.md b/tests/language_2/invalid_returns/README.md
new file mode 100644
index 0000000..0a6738b
--- /dev/null
+++ b/tests/language_2/invalid_returns/README.md
@@ -0,0 +1,6 @@
+# Feature tests for invalid returns
+
+This directory holds tests for valid and invalid returns from functions. See
+the
+[feature specification](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/generalized-void.md) for
+details, or the formal spec once integrated.
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/async_invalid_return_00_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/async_invalid_return_00_test.dart
index cc1d1db..eb558c1 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/async_invalid_return_00_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `flatten(T)` is not `void`, `dynamic`, or `Null`
+*/
+Object test() async {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/async_invalid_return_01_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/async_invalid_return_01_test.dart
index cc1d1db..7c2ea7e 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/async_invalid_return_01_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `flatten(T)` is not `void`, `dynamic`, or `Null`
+*/
+Future<int> test() async {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/async_invalid_return_02_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/async_invalid_return_02_test.dart
index cc1d1db..f3bb17f 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/async_invalid_return_02_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `flatten(T)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<int> test() async {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/async_invalid_return_03_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/async_invalid_return_03_test.dart
index cc1d1db..aba69cd 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/async_invalid_return_03_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `flatten(T)` is not `void`, `dynamic`, or `Null`
+*/
+Future<Object> test() async {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/async_invalid_return_04_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/async_invalid_return_04_test.dart
index cc1d1db..089d20d 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/async_invalid_return_04_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `flatten(T)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<Object> test() async {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/invalid_returns/async_invalid_return_05_test.dart b/tests/language_2/invalid_returns/async_invalid_return_05_test.dart
new file mode 100644
index 0000000..28be90b
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_05_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+int v = null;
+void test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_06_test.dart b/tests/language_2/invalid_returns/async_invalid_return_06_test.dart
new file mode 100644
index 0000000..4df22a2
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_06_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+int v = null;
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_07_test.dart b/tests/language_2/invalid_returns/async_invalid_return_07_test.dart
new file mode 100644
index 0000000..17fef33
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_07_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+int v = null;
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_08_test.dart b/tests/language_2/invalid_returns/async_invalid_return_08_test.dart
new file mode 100644
index 0000000..cfd12e3
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_08_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Object v = null;
+void test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_09_test.dart b/tests/language_2/invalid_returns/async_invalid_return_09_test.dart
new file mode 100644
index 0000000..353e1d3
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_09_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Object v = null;
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_10_test.dart b/tests/language_2/invalid_returns/async_invalid_return_10_test.dart
new file mode 100644
index 0000000..0c86c25
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_10_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Object v = null;
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_11_test.dart b/tests/language_2/invalid_returns/async_invalid_return_11_test.dart
new file mode 100644
index 0000000..0d8da86
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_11_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Future<int> v = null;
+void test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_12_test.dart b/tests/language_2/invalid_returns/async_invalid_return_12_test.dart
new file mode 100644
index 0000000..25077da
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_12_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Future<int> v = null;
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_13_test.dart b/tests/language_2/invalid_returns/async_invalid_return_13_test.dart
new file mode 100644
index 0000000..426e24a
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_13_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Future<int> v = null;
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_14_test.dart b/tests/language_2/invalid_returns/async_invalid_return_14_test.dart
new file mode 100644
index 0000000..62bf342
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_14_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<int> v = null;
+void test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_15_test.dart b/tests/language_2/invalid_returns/async_invalid_return_15_test.dart
new file mode 100644
index 0000000..71045781
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_15_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<int> v = null;
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_16_test.dart b/tests/language_2/invalid_returns/async_invalid_return_16_test.dart
new file mode 100644
index 0000000..cc48867
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_16_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<int> v = null;
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_17_test.dart b/tests/language_2/invalid_returns/async_invalid_return_17_test.dart
new file mode 100644
index 0000000..c3e6f93
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_17_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Future<Object> v = null;
+void test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_18_test.dart b/tests/language_2/invalid_returns/async_invalid_return_18_test.dart
new file mode 100644
index 0000000..adb46e6
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_18_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Future<Object> v = null;
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_19_test.dart b/tests/language_2/invalid_returns/async_invalid_return_19_test.dart
new file mode 100644
index 0000000..423c1a6
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_19_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+Future<Object> v = null;
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_20_test.dart b/tests/language_2/invalid_returns/async_invalid_return_20_test.dart
new file mode 100644
index 0000000..a8bb214
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_20_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<Object> v = null;
+void test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_21_test.dart b/tests/language_2/invalid_returns/async_invalid_return_21_test.dart
new file mode 100644
index 0000000..0274ef9
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_21_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<Object> v = null;
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_22_test.dart b/tests/language_2/invalid_returns/async_invalid_return_22_test.dart
new file mode 100644
index 0000000..6d8fb3e
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_22_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(T)` is
+  `void` and `flatten(S)` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<Object> v = null;
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_23_test.dart b/tests/language_2/invalid_returns/async_invalid_return_23_test.dart
new file mode 100644
index 0000000..604c0f0
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_23_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+void v = null;
+Object test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_24_test.dart b/tests/language_2/invalid_returns/async_invalid_return_24_test.dart
new file mode 100644
index 0000000..ed625c3
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_24_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+Future<void> v = null;
+Object test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_25_test.dart b/tests/language_2/invalid_returns/async_invalid_return_25_test.dart
new file mode 100644
index 0000000..d00e9f0
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_25_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+FutureOr<void> v = null;
+Object test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_26_test.dart b/tests/language_2/invalid_returns/async_invalid_return_26_test.dart
new file mode 100644
index 0000000..0151c97
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_26_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+void v = null;
+Future<int> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_27_test.dart b/tests/language_2/invalid_returns/async_invalid_return_27_test.dart
new file mode 100644
index 0000000..04dc428
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_27_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+Future<void> v = null;
+Future<int> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_28_test.dart b/tests/language_2/invalid_returns/async_invalid_return_28_test.dart
new file mode 100644
index 0000000..3630bb4
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_28_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+FutureOr<void> v = null;
+Future<int> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_29_test.dart b/tests/language_2/invalid_returns/async_invalid_return_29_test.dart
new file mode 100644
index 0000000..3a49834
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_29_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+void v = null;
+FutureOr<int> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_30_test.dart b/tests/language_2/invalid_returns/async_invalid_return_30_test.dart
new file mode 100644
index 0000000..391e1c6
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_30_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+Future<void> v = null;
+FutureOr<int> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_31_test.dart b/tests/language_2/invalid_returns/async_invalid_return_31_test.dart
new file mode 100644
index 0000000..be94da2
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_31_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+FutureOr<void> v = null;
+FutureOr<int> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_32_test.dart b/tests/language_2/invalid_returns/async_invalid_return_32_test.dart
new file mode 100644
index 0000000..6247cb7
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_32_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+void v = null;
+Future<Object> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_33_test.dart b/tests/language_2/invalid_returns/async_invalid_return_33_test.dart
new file mode 100644
index 0000000..d7c673d
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_33_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+Future<void> v = null;
+Future<Object> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_34_test.dart b/tests/language_2/invalid_returns/async_invalid_return_34_test.dart
new file mode 100644
index 0000000..740505a
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_34_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+FutureOr<void> v = null;
+Future<Object> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_35_test.dart b/tests/language_2/invalid_returns/async_invalid_return_35_test.dart
new file mode 100644
index 0000000..09cef1c
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_35_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+void v = null;
+FutureOr<Object> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_36_test.dart b/tests/language_2/invalid_returns/async_invalid_return_36_test.dart
new file mode 100644
index 0000000..9fb723a
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_36_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+Future<void> v = null;
+FutureOr<Object> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_37_test.dart b/tests/language_2/invalid_returns/async_invalid_return_37_test.dart
new file mode 100644
index 0000000..483e0e1
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_37_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `flatten(S)` is
+  `void` and `flatten(T)` is not `void`, `dynamic`, or `Null`.
+*/
+FutureOr<void> v = null;
+FutureOr<Object> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_38_test.dart b/tests/language_2/invalid_returns/async_invalid_return_38_test.dart
new file mode 100644
index 0000000..d5e3b05
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_38_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+int v = null;
+Future<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_39_test.dart b/tests/language_2/invalid_returns/async_invalid_return_39_test.dart
new file mode 100644
index 0000000..9628c69
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_39_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+Future<int> v = null;
+Future<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_40_test.dart b/tests/language_2/invalid_returns/async_invalid_return_40_test.dart
new file mode 100644
index 0000000..8de06ea
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_40_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+FutureOr<int> v = null;
+Future<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_41_test.dart b/tests/language_2/invalid_returns/async_invalid_return_41_test.dart
new file mode 100644
index 0000000..d32049b
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_41_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+Future<Future<String>> v = null;
+Future<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_42_test.dart b/tests/language_2/invalid_returns/async_invalid_return_42_test.dart
new file mode 100644
index 0000000..9dbc0e5
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_42_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+int v = null;
+FutureOr<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_43_test.dart b/tests/language_2/invalid_returns/async_invalid_return_43_test.dart
new file mode 100644
index 0000000..10358d7
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_43_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+Future<int> v = null;
+FutureOr<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_44_test.dart b/tests/language_2/invalid_returns/async_invalid_return_44_test.dart
new file mode 100644
index 0000000..1dd43d6
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_44_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+FutureOr<int> v = null;
+FutureOr<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_invalid_return_45_test.dart b/tests/language_2/invalid_returns/async_invalid_return_45_test.dart
new file mode 100644
index 0000000..0f5689d
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_invalid_return_45_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if
+  `Future<flatten(S)>` is not assignable to `T`.
+*/
+Future<Future<String>> v = null;
+FutureOr<String> test() async {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/async_valid_returns.dart b/tests/language_2/invalid_returns/async_valid_returns.dart
new file mode 100644
index 0000000..3df1be4
--- /dev/null
+++ b/tests/language_2/invalid_returns/async_valid_returns.dart
@@ -0,0 +1,465 @@
+// 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.
+
+import 'dart:async';
+
+void vv = null;
+dynamic vd = null;
+Object vo = null;
+Null vn = null;
+int vi = null;
+Future<void> fvv = null;
+Future<dynamic> fvd = null;
+Future<Object> fvo = null;
+Future<Null> fvn = null;
+Future<int> fvi = null;
+FutureOr<void> fovv = null;
+FutureOr<dynamic> fovd = null;
+FutureOr<Object> fovo = null;
+FutureOr<Null> fovn = null;
+FutureOr<int> fovi = null;
+
+
+/* Test the cases where expression bodied functions are more permissive
+ * than block bodied functions (places where they behave the same
+ * are tested below).
+
+An asynchronous expression bodied function with return type `T` and return
+expression `e` has a valid return if:
+  * `flatten(T)` is `void`
+  * or `return e;` is a valid return for an equivalent block bodied function
+  with return type `T` as defined below.
+*/
+
+  
+void async_int_to_void_e() async => vi;
+Future<void> async_int_to_Future_void__e() async => vi;
+FutureOr<void> async_int_to_FutureOr_void__e() async => vi;
+void async_Object_to_void_e() async => vo;
+Future<void> async_Object_to_Future_void__e() async => vo;
+FutureOr<void> async_Object_to_FutureOr_void__e() async => vo;
+void async_Future_int__to_void_e() async => fvi;
+Future<void> async_Future_int__to_Future_void__e() async => fvi;
+FutureOr<void> async_Future_int__to_FutureOr_void__e() async => fvi;
+void async_FutureOr_int__to_void_e() async => fovi;
+Future<void> async_FutureOr_int__to_Future_void__e() async => fovi;
+FutureOr<void> async_FutureOr_int__to_FutureOr_void__e() async => fovi;
+void async_Future_Object__to_void_e() async => fvo;
+Future<void> async_Future_Object__to_Future_void__e() async => fvo;
+FutureOr<void> async_Future_Object__to_FutureOr_void__e() async => fvo;
+void async_FutureOr_Object__to_void_e() async => fovo;
+Future<void> async_FutureOr_Object__to_Future_void__e() async => fovo;
+FutureOr<void> async_FutureOr_Object__to_FutureOr_void__e() async => fovo;
+
+/* Test the cases that apply only to block bodied  functions
+ */
+
+/*
+* `return;` is a valid return if any of the following are true:
+  * `flatten(T)` is `void`
+  * `flatten(T)` is `dynamic`
+  * `flatten(T)` is `Null`.
+*/
+Future<void> async_empty_to_Future_void_() async {
+  return;
+}
+
+Future<dynamic> async_empty_to_Future_dynamic_() async {
+  return;
+}
+
+Future<Null> async_empty_to_Future_Null_() async {
+  return;
+}
+
+FutureOr<void> async_empty_to_FutureOr_void_() async {
+  return;
+}
+
+FutureOr<dynamic> async_empty_to_FutureOr_dynamic_() async {
+  return;
+}
+
+FutureOr<Null> async_empty_to_FutureOr_Null_() async {
+  return;
+}
+
+void async_empty_to_void() async {
+  return;
+}
+
+dynamic async_empty_to_dynamic() async {
+  return;
+}
+
+/* Test the cases that apply to both expression bodied and block bodied
+ * functions
+ */
+
+/*
+* `return exp;` where `exp` has static type `S` is a valid return if:
+  * `flatten(S)` is `void`
+  * and `flatten(T)` is `void`, `dynamic` or `Null`
+*/
+Future<void> async_void_to_Future_void__e() async => vv;
+Future<void> async_void_to_Future_void_() async {
+  return vv;
+}
+
+Future<void> async_Future_void__to_Future_void__e() async => fvv;
+Future<void> async_Future_void__to_Future_void_() async {
+  return fvv;
+}
+
+Future<void> async_FutureOr_void__to_Future_void__e() async => fovv;
+Future<void> async_FutureOr_void__to_Future_void_() async {
+  return fovv;
+}
+
+Future<dynamic> async_void_to_Future_dynamic__e() async => vv;
+Future<dynamic> async_void_to_Future_dynamic_() async {
+  return vv;
+}
+
+Future<dynamic> async_Future_void__to_Future_dynamic__e() async => fvv;
+Future<dynamic> async_Future_void__to_Future_dynamic_() async {
+  return fvv;
+}
+
+Future<dynamic> async_FutureOr_void__to_Future_dynamic__e() async => fovv;
+Future<dynamic> async_FutureOr_void__to_Future_dynamic_() async {
+  return fovv;
+}
+
+Future<Null> async_void_to_Future_Null__e() async => vv;
+Future<Null> async_void_to_Future_Null_() async {
+  return vv;
+}
+
+Future<Null> async_Future_void__to_Future_Null__e() async => fvv;
+Future<Null> async_Future_void__to_Future_Null_() async {
+  return fvv;
+}
+
+Future<Null> async_FutureOr_void__to_Future_Null__e() async => fovv;
+Future<Null> async_FutureOr_void__to_Future_Null_() async {
+  return fovv;
+}
+
+FutureOr<void> async_void_to_FutureOr_void__e() async => vv;
+FutureOr<void> async_void_to_FutureOr_void_() async {
+  return vv;
+}
+
+FutureOr<void> async_Future_void__to_FutureOr_void__e() async => fvv;
+FutureOr<void> async_Future_void__to_FutureOr_void_() async {
+  return fvv;
+}
+
+FutureOr<void> async_FutureOr_void__to_FutureOr_void__e() async => fovv;
+FutureOr<void> async_FutureOr_void__to_FutureOr_void_() async {
+  return fovv;
+}
+
+FutureOr<dynamic> async_void_to_FutureOr_dynamic__e() async => vv;
+FutureOr<dynamic> async_void_to_FutureOr_dynamic_() async {
+  return vv;
+}
+
+FutureOr<dynamic> async_Future_void__to_FutureOr_dynamic__e() async => fvv;
+FutureOr<dynamic> async_Future_void__to_FutureOr_dynamic_() async {
+  return fvv;
+}
+
+FutureOr<dynamic> async_FutureOr_void__to_FutureOr_dynamic__e() async => fovv;
+FutureOr<dynamic> async_FutureOr_void__to_FutureOr_dynamic_() async {
+  return fovv;
+}
+
+FutureOr<Null> async_void_to_FutureOr_Null__e() async => vv;
+FutureOr<Null> async_void_to_FutureOr_Null_() async {
+  return vv;
+}
+
+FutureOr<Null> async_Future_void__to_FutureOr_Null__e() async => fvv;
+FutureOr<Null> async_Future_void__to_FutureOr_Null_() async {
+  return fvv;
+}
+
+FutureOr<Null> async_FutureOr_void__to_FutureOr_Null__e() async => fovv;
+FutureOr<Null> async_FutureOr_void__to_FutureOr_Null_() async {
+  return fovv;
+}
+
+void async_void_to_void_e() async => vv;
+void async_void_to_void() async {
+  return vv;
+}
+
+void async_Future_void__to_void_e() async => fvv;
+void async_Future_void__to_void() async {
+  return fvv;
+}
+
+void async_FutureOr_void__to_void_e() async => fovv;
+void async_FutureOr_void__to_void() async {
+  return fovv;
+}
+
+dynamic async_void_to_dynamic_e() async => vv;
+dynamic async_void_to_dynamic() async {
+  return vv;
+}
+
+dynamic async_Future_void__to_dynamic_e() async => fvv;
+dynamic async_Future_void__to_dynamic() async {
+  return fvv;
+}
+
+dynamic async_FutureOr_void__to_dynamic_e() async => fovv;
+dynamic async_FutureOr_void__to_dynamic() async {
+  return fovv;
+}
+
+/*
+* `return exp;` where `exp` has static type `S` is a valid return if:
+  * `flatten(T)` is `void`
+  * and `flatten(S)` is `void`, `dynamic` or `Null`
+*/
+void async_Future_dynamic__to_void_e() async => fvd;
+void async_Future_dynamic__to_void() async {
+  return fvd;
+}
+
+Future<void> async_Future_dynamic__to_Future_void__e() async => fvd;
+Future<void> async_Future_dynamic__to_Future_void_() async {
+  return fvd;
+}
+
+FutureOr<void> async_Future_dynamic__to_FutureOr_void__e() async => fvd;
+FutureOr<void> async_Future_dynamic__to_FutureOr_void_() async {
+  return fvd;
+}
+
+void async_Future_Null__to_void_e() async => fvn;
+void async_Future_Null__to_void() async {
+  return fvn;
+}
+
+Future<void> async_Future_Null__to_Future_void__e() async => fvn;
+Future<void> async_Future_Null__to_Future_void_() async {
+  return fvn;
+}
+
+FutureOr<void> async_Future_Null__to_FutureOr_void__e() async => fvn;
+FutureOr<void> async_Future_Null__to_FutureOr_void_() async {
+  return fvn;
+}
+
+void async_FutureOr_dynamic__to_void_e() async => fovd;
+void async_FutureOr_dynamic__to_void() async {
+  return fovd;
+}
+
+Future<void> async_FutureOr_dynamic__to_Future_void__e() async => fovd;
+Future<void> async_FutureOr_dynamic__to_Future_void_() async {
+  return fovd;
+}
+
+FutureOr<void> async_FutureOr_dynamic__to_FutureOr_void__e() async => fovd;
+FutureOr<void> async_FutureOr_dynamic__to_FutureOr_void_() async {
+  return fovd;
+}
+
+void async_FutureOr_Null__to_void_e() async => fovn;
+void async_FutureOr_Null__to_void() async {
+  return fovn;
+}
+
+Future<void> async_FutureOr_Null__to_Future_void__e() async => fovn;
+Future<void> async_FutureOr_Null__to_Future_void_() async {
+  return fovn;
+}
+
+FutureOr<void> async_FutureOr_Null__to_FutureOr_void__e() async => fovn;
+FutureOr<void> async_FutureOr_Null__to_FutureOr_void_() async {
+  return fovn;
+}
+
+void async_dynamic_to_void_e() async => vd;
+void async_dynamic_to_void() async {
+  return vd;
+}
+
+Future<void> async_dynamic_to_Future_void__e() async => vd;
+Future<void> async_dynamic_to_Future_void_() async {
+  return vd;
+}
+
+FutureOr<void> async_dynamic_to_FutureOr_void__e() async => vd;
+FutureOr<void> async_dynamic_to_FutureOr_void_() async {
+  return vd;
+}
+
+void async_Null_to_void_e() async => vn;
+void async_Null_to_void() async {
+  return vn;
+}
+
+Future<void> async_Null_to_Future_void__e() async => vn;
+Future<void> async_Null_to_Future_void_() async {
+  return vn;
+}
+
+FutureOr<void> async_Null_to_FutureOr_void__e() async => vn;
+FutureOr<void> async_Null_to_FutureOr_void_() async {
+  return vn;
+}
+
+/*
+* `return exp;` where `exp` has static type `S` is a valid return if:
+  * `flatten(T)` is not `void`
+  * and `flatten(S)` is not `void`
+  * and `Future<flatten(S)>` is assignable to `T`
+*/
+Future<int> async_int_to_Future_int__e() async => vi;
+Future<int> async_int_to_Future_int_() async {
+  return vi;
+}
+
+Future<int> async_Object_to_Future_int__e() async => vo;
+Future<int> async_Object_to_Future_int_() async {
+  return vo;
+}
+
+Future<int> async_FutureOr_int__to_Future_int__e() async => fovi;
+Future<int> async_FutureOr_int__to_Future_int_() async {
+  return fovi;
+}
+
+Future<int> async_Future_int__to_Future_int__e() async => fvi;
+Future<int> async_Future_int__to_Future_int_() async {
+  return fvi;
+}
+
+void main() {
+  async_int_to_void_e();
+  async_int_to_Future_void__e();
+  async_int_to_FutureOr_void__e();
+  async_Object_to_void_e();
+  async_Object_to_Future_void__e();
+  async_Object_to_FutureOr_void__e();
+  async_Future_int__to_void_e();
+  async_Future_int__to_Future_void__e();
+  async_Future_int__to_FutureOr_void__e();
+  async_FutureOr_int__to_void_e();
+  async_FutureOr_int__to_Future_void__e();
+  async_FutureOr_int__to_FutureOr_void__e();
+  async_Future_Object__to_void_e();
+  async_Future_Object__to_Future_void__e();
+  async_Future_Object__to_FutureOr_void__e();
+  async_FutureOr_Object__to_void_e();
+  async_FutureOr_Object__to_Future_void__e();
+  async_FutureOr_Object__to_FutureOr_void__e();
+  async_empty_to_Future_void_();
+  async_empty_to_Future_dynamic_();
+  async_empty_to_Future_Null_();
+  async_empty_to_FutureOr_void_();
+  async_empty_to_FutureOr_dynamic_();
+  async_empty_to_FutureOr_Null_();
+  async_empty_to_void();
+  async_empty_to_dynamic();
+  async_void_to_Future_void__e();
+  async_void_to_Future_void_();
+  async_Future_void__to_Future_void__e();
+  async_Future_void__to_Future_void_();
+  async_FutureOr_void__to_Future_void__e();
+  async_FutureOr_void__to_Future_void_();
+  async_void_to_Future_dynamic__e();
+  async_void_to_Future_dynamic_();
+  async_Future_void__to_Future_dynamic__e();
+  async_Future_void__to_Future_dynamic_();
+  async_FutureOr_void__to_Future_dynamic__e();
+  async_FutureOr_void__to_Future_dynamic_();
+  async_void_to_Future_Null__e();
+  async_void_to_Future_Null_();
+  async_Future_void__to_Future_Null__e();
+  async_Future_void__to_Future_Null_();
+  async_FutureOr_void__to_Future_Null__e();
+  async_FutureOr_void__to_Future_Null_();
+  async_void_to_FutureOr_void__e();
+  async_void_to_FutureOr_void_();
+  async_Future_void__to_FutureOr_void__e();
+  async_Future_void__to_FutureOr_void_();
+  async_FutureOr_void__to_FutureOr_void__e();
+  async_FutureOr_void__to_FutureOr_void_();
+  async_void_to_FutureOr_dynamic__e();
+  async_void_to_FutureOr_dynamic_();
+  async_Future_void__to_FutureOr_dynamic__e();
+  async_Future_void__to_FutureOr_dynamic_();
+  async_FutureOr_void__to_FutureOr_dynamic__e();
+  async_FutureOr_void__to_FutureOr_dynamic_();
+  async_void_to_FutureOr_Null__e();
+  async_void_to_FutureOr_Null_();
+  async_Future_void__to_FutureOr_Null__e();
+  async_Future_void__to_FutureOr_Null_();
+  async_FutureOr_void__to_FutureOr_Null__e();
+  async_FutureOr_void__to_FutureOr_Null_();
+  async_void_to_void_e();
+  async_void_to_void();
+  async_Future_void__to_void_e();
+  async_Future_void__to_void();
+  async_FutureOr_void__to_void_e();
+  async_FutureOr_void__to_void();
+  async_void_to_dynamic_e();
+  async_void_to_dynamic();
+  async_Future_void__to_dynamic_e();
+  async_Future_void__to_dynamic();
+  async_FutureOr_void__to_dynamic_e();
+  async_FutureOr_void__to_dynamic();
+  async_Future_dynamic__to_void_e();
+  async_Future_dynamic__to_void();
+  async_Future_dynamic__to_Future_void__e();
+  async_Future_dynamic__to_Future_void_();
+  async_Future_dynamic__to_FutureOr_void__e();
+  async_Future_dynamic__to_FutureOr_void_();
+  async_Future_Null__to_void_e();
+  async_Future_Null__to_void();
+  async_Future_Null__to_Future_void__e();
+  async_Future_Null__to_Future_void_();
+  async_Future_Null__to_FutureOr_void__e();
+  async_Future_Null__to_FutureOr_void_();
+  async_FutureOr_dynamic__to_void_e();
+  async_FutureOr_dynamic__to_void();
+  async_FutureOr_dynamic__to_Future_void__e();
+  async_FutureOr_dynamic__to_Future_void_();
+  async_FutureOr_dynamic__to_FutureOr_void__e();
+  async_FutureOr_dynamic__to_FutureOr_void_();
+  async_FutureOr_Null__to_void_e();
+  async_FutureOr_Null__to_void();
+  async_FutureOr_Null__to_Future_void__e();
+  async_FutureOr_Null__to_Future_void_();
+  async_FutureOr_Null__to_FutureOr_void__e();
+  async_FutureOr_Null__to_FutureOr_void_();
+  async_dynamic_to_void_e();
+  async_dynamic_to_void();
+  async_dynamic_to_Future_void__e();
+  async_dynamic_to_Future_void_();
+  async_dynamic_to_FutureOr_void__e();
+  async_dynamic_to_FutureOr_void_();
+  async_Null_to_void_e();
+  async_Null_to_void();
+  async_Null_to_Future_void__e();
+  async_Null_to_Future_void_();
+  async_Null_to_FutureOr_void__e();
+  async_Null_to_FutureOr_void_();
+  async_int_to_Future_int__e();
+  async_int_to_Future_int_();
+  async_Object_to_Future_int__e();
+  async_Object_to_Future_int_();
+  async_FutureOr_int__to_Future_int__e();
+  async_FutureOr_int__to_Future_int_();
+  async_Future_int__to_Future_int__e();
+  async_Future_int__to_Future_int_();
+}
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_00_test.dart
similarity index 62%
rename from tests/language_2/void/return_void_async_error4_test.dart
rename to tests/language_2/invalid_returns/sync_invalid_return_00_test.dart
index cc1d1db..479a689 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_00_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `T` is not `void`, `dynamic`, or `Null`
+*/
+int test() {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_01_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/sync_invalid_return_01_test.dart
index cc1d1db..716b985 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_01_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `T` is not `void`, `dynamic`, or `Null`
+*/
+Object test() {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_02_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/sync_invalid_return_02_test.dart
index cc1d1db..73d89e1 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_02_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `T` is not `void`, `dynamic`, or `Null`
+*/
+Future<int> test() {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_03_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/sync_invalid_return_03_test.dart
index cc1d1db..1cf96e2 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_03_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `T` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<int> test() {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_04_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/sync_invalid_return_04_test.dart
index cc1d1db..1555126 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_04_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `T` is not `void`, `dynamic`, or `Null`
+*/
+Future<Object> test() {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_05_test.dart
similarity index 62%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/sync_invalid_return_05_test.dart
index cc1d1db..2322acc 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_05_test.dart
@@ -4,11 +4,13 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return;` is an error if `T` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<Object> test() {
+  return; //# none: static type warning
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_06_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_06_test.dart
new file mode 100644
index 0000000..d590372
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_06_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `T` is `void` and
+  `S` is not `void`, `dynamic`, or `Null`
+*/
+int v = null;
+void test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_07_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_07_test.dart
new file mode 100644
index 0000000..d458681
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_07_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `T` is `void` and
+  `S` is not `void`, `dynamic`, or `Null`
+*/
+Object v = null;
+void test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_08_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_08_test.dart
new file mode 100644
index 0000000..c6eae33
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_08_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `T` is `void` and
+  `S` is not `void`, `dynamic`, or `Null`
+*/
+Future<int> v = null;
+void test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_09_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_09_test.dart
new file mode 100644
index 0000000..e1b5705
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_09_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `T` is `void` and
+  `S` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<int> v = null;
+void test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_10_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_10_test.dart
new file mode 100644
index 0000000..9f27148
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_10_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `T` is `void` and
+  `S` is not `void`, `dynamic`, or `Null`
+*/
+Future<Object> v = null;
+void test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_11_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_11_test.dart
new file mode 100644
index 0000000..c30d319
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_11_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `T` is `void` and
+  `S` is not `void`, `dynamic`, or `Null`
+*/
+FutureOr<Object> v = null;
+void test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_12_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_12_test.dart
new file mode 100644
index 0000000..047b36a
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_12_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is `void` and
+  `T` is not `void`, or `dynamic` or `Null`.
+*/
+void v = null;
+int test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_13_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_13_test.dart
new file mode 100644
index 0000000..04ce202
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_13_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is `void` and
+  `T` is not `void`, or `dynamic` or `Null`.
+*/
+void v = null;
+Object test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_14_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_14_test.dart
new file mode 100644
index 0000000..e4c7c53
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_14_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is `void` and
+  `T` is not `void`, or `dynamic` or `Null`.
+*/
+void v = null;
+Future<int> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_15_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_15_test.dart
new file mode 100644
index 0000000..afba019
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_15_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is `void` and
+  `T` is not `void`, or `dynamic` or `Null`.
+*/
+void v = null;
+FutureOr<int> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_16_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_16_test.dart
new file mode 100644
index 0000000..f8998d8
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_16_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is `void` and
+  `T` is not `void`, or `dynamic` or `Null`.
+*/
+void v = null;
+Future<Object> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_17_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_17_test.dart
new file mode 100644
index 0000000..9e572d6
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_17_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is `void` and
+  `T` is not `void`, or `dynamic` or `Null`.
+*/
+void v = null;
+FutureOr<Object> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_18_test.dart
similarity index 60%
copy from tests/language_2/void/return_void_async_error4_test.dart
copy to tests/language_2/invalid_returns/sync_invalid_return_18_test.dart
index cc1d1db..cf33695 100644
--- a/tests/language_2/void/return_void_async_error4_test.dart
+++ b/tests/language_2/invalid_returns/sync_invalid_return_18_test.dart
@@ -4,11 +4,15 @@
 
 import 'dart:async';
 
-void main() {
-  test();
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+int v = null;
+String test() {
+  return /*@compile-error=unspecified*/ v;
 }
 
-// Testing that a block bodied async function may not return FutureOr<void>
-void test() async {
-  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+void main() {
+  test();
 }
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_19_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_19_test.dart
new file mode 100644
index 0000000..a68e4dc
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_19_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+Future<int> v = null;
+String test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_20_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_20_test.dart
new file mode 100644
index 0000000..38a03c1
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_20_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+FutureOr<int> v = null;
+String test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_21_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_21_test.dart
new file mode 100644
index 0000000..7196237
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_21_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+int v = null;
+Future<String> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_22_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_22_test.dart
new file mode 100644
index 0000000..18c5c5b
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_22_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+Future<int> v = null;
+Future<String> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_23_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_23_test.dart
new file mode 100644
index 0000000..2640028
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_23_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+FutureOr<int> v = null;
+Future<String> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_24_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_24_test.dart
new file mode 100644
index 0000000..f891e63
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_24_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+int v = null;
+FutureOr<String> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_25_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_25_test.dart
new file mode 100644
index 0000000..b6237fd
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_25_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+Future<int> v = null;
+FutureOr<String> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_invalid_return_26_test.dart b/tests/language_2/invalid_returns/sync_invalid_return_26_test.dart
new file mode 100644
index 0000000..2f11208
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_invalid_return_26_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import 'dart:async';
+
+/*
+* `return exp;` where `exp` has static type `S` is an error if `S` is not
+  assignable to `T`.
+*/
+FutureOr<int> v = null;
+FutureOr<String> test() {
+  return /*@compile-error=unspecified*/ v;
+}
+
+void main() {
+  test();
+}
diff --git a/tests/language_2/invalid_returns/sync_valid_returns.dart b/tests/language_2/invalid_returns/sync_valid_returns.dart
new file mode 100644
index 0000000..3ae76ff
--- /dev/null
+++ b/tests/language_2/invalid_returns/sync_valid_returns.dart
@@ -0,0 +1,151 @@
+// 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.
+
+import 'dart:async';
+
+void vv = null;
+dynamic vd = null;
+Object vo = null;
+Null vn = null;
+int vi = null;
+Future<void> fvv = null;
+Future<dynamic> fvd = null;
+Future<Object> fvo = null;
+Future<Null> fvn = null;
+Future<int> fvi = null;
+FutureOr<void> fovv = null;
+FutureOr<dynamic> fovd = null;
+FutureOr<Object> fovo = null;
+FutureOr<Null> fovn = null;
+FutureOr<int> fovi = null;
+
+/* Test the cases where expression bodied functions are more permissive
+ * than block bodied functions (places where they behave the same
+ * are tested below).
+
+A synchronous expression bodied function with return type `T` and return expression
+`e` has a valid return if:
+  * `T` is `void`
+  * or `return exp;` is a valid return for an equivalent block bodied function
+  with return type `T` as defined below.
+*/
+void sync_int_to_void_e() => vi;
+void sync_Object_to_void_e() => vo;
+void sync_Future_int__to_void_e() => fvi;
+void sync_FutureOr_int__to_void_e() => fovi;
+void sync_Future_Object__to_void_e() => fvo;
+void sync_FutureOr_Object__to_void_e() => fovo;
+
+
+/* Test the cases that apply only to block bodied  functions
+ */
+
+/*
+* `return;` is a valid return if any of the following are true:
+  * `T` is `void`
+  * `T` is `dynamic`
+  * `T` is `Null`.
+*/
+void sync_empty_to_void() {
+  return;
+}
+
+dynamic sync_empty_to_dynamic() {
+  return;
+}
+
+Null sync_empty_to_Null() {
+  return;
+}
+
+/* Test the cases that apply to both expression bodied and block bodied
+ * functions
+ */
+  
+
+
+/*
+* `return exp;` where `exp` has static type `S` is a valid return if:
+  * `S` is `void`
+  * and `T` is `void` or `dynamic` or `Null`
+*/
+void sync_void_to_void_e() => vv;
+void sync_void_to_void() {
+  return vv;
+}
+
+dynamic sync_void_to_dynamic_e() => vv;
+dynamic sync_void_to_dynamic() {
+  return vv;
+}
+
+Null sync_void_to_Null_e() => vv;
+Null sync_void_to_Null() {
+  return vv;
+}
+
+/*
+* `return exp;` where `exp` has static type `S` is a valid return if:
+  * `T` is `void`
+  * and `S` is `void` or `dynamic` or `Null`
+
+*/
+void sync_dynamic_to_void_e() => vd;
+void sync_dynamic_to_void() {
+  return vd;
+}
+
+void sync_Null_to_void_e() => vn;
+void sync_Null_to_void() {
+  return vn;
+}
+
+/*
+* `return exp;` where `exp` has static type `S` is a valid return if:
+  * `T` is not `void`
+  * and `S` is not `void`
+  * and `S` is assignable to `T`
+*/
+int sync_int_to_int_e() => vi;
+int sync_int_to_int() {
+  return vi;
+}
+
+int sync_Object_to_int_e() => vo;
+int sync_Object_to_int() {
+  return vo;
+}
+
+int sync_FutureOr_int__to_int_e() => fovi;
+int sync_FutureOr_int__to_int() {
+  return fovi;
+}
+
+void main() {
+  sync_int_to_void_e();
+  sync_Object_to_void_e();
+  sync_Future_int__to_void_e();
+  sync_FutureOr_int__to_void_e();
+  sync_Future_Object__to_void_e();
+  sync_FutureOr_Object__to_void_e();
+  sync_empty_to_void();
+  sync_empty_to_dynamic();
+  sync_empty_to_Null();
+  sync_void_to_void_e();
+  sync_void_to_void();
+  sync_void_to_dynamic_e();
+  sync_void_to_dynamic();
+  sync_void_to_Null_e();
+  sync_void_to_Null();
+  sync_dynamic_to_void_e();
+  sync_dynamic_to_void();
+  sync_Null_to_void_e();
+  sync_Null_to_void();
+  sync_int_to_int_e();
+  sync_int_to_int();
+  sync_Object_to_int_e();
+  sync_Object_to_int();
+  sync_FutureOr_int__to_int_e();
+  sync_FutureOr_int__to_int();
+}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 7c88e69..993f60a 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -7,6 +7,30 @@
 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 == 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 ]
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34012
+invalid_returns/*: Skip  # https://github.com/dart-lang/sdk/issues/34012
+
+[ $compiler == app_jit || $compiler == app_jitk || $compiler == none ]
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34013
+invalid_returns/*: Skip  # https://github.com/dart-lang/sdk/issues/34013
+
+[ $compiler == dartk || $compiler == dartkb || $compiler == dartkp || $compiler == fasta ]
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34014
+invalid_returns/*: Skip  # https://github.com/dart-lang/sdk/issues/34014
+
+[ $compiler == spec_parser ]
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34015
+invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34015
+
 [ $compiler == app_jit ]
 deferred_inheritance_constraints_test/redirecting_constructor: Crash
 
@@ -217,11 +241,11 @@
 vm/type_vm_test/26: MissingCompileTimeError
 vm/type_vm_test/27: MissingCompileTimeError
 void/return_future_future_or_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void_block_return_test/00: MissingCompileTimeError # Requires strong mode
-void_type_callbacks_test: Skip # Requires strong mode
-void_type_function_types_test: Skip # Requires strong mode
-void_type_override_test: Skip # Requires strong mode
-void_type_usage_test: Skip # Requires strong mode
+void/void_block_return_test/00: MissingCompileTimeError # Requires strong mode
+void/void_type_callbacks_test: Skip # Requires strong mode
+void/void_type_function_types_test: Skip # Requires strong mode
+void/void_type_override_test: Skip # Requires strong mode
+void/void_type_usage_test: Skip # Requires strong mode
 wrong_number_type_arguments_test/*: MissingCompileTimeError # Requires strong mode
 wrong_number_type_arguments_test/none: Pass
 
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index cd17a83..d00060a 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -22,10 +22,10 @@
 multiline_newline_test/05: Pass
 multiline_newline_test/05r: Pass
 regress_29349_test: Pass
-void_type_function_types_test/04: MissingCompileTimeError
-void_type_function_types_test/06: MissingCompileTimeError
-void_type_function_types_test/08: MissingCompileTimeError
-void_type_function_types_test/none: Pass
+unsupported_operators_test/01: MissingCompileTimeError
+unsupported_operators_test/02: MissingCompileTimeError
+unsupported_operators_test/03: MissingCompileTimeError
+unsupported_operators_test/04: MissingCompileTimeError
 
 [ $compiler == dart2analyzer && !$analyzer_use_fasta_parser && !$fasta ]
 constructor_type_parameter_test/00: MissingCompileTimeError # Issue 33110
@@ -131,57 +131,17 @@
 vm/regress_33469_test/01: Crash # http://dartbug.com/33481
 vm/regress_33469_test/02: Crash # http://dartbug.com/33481
 vm/regress_33469_test/03: MissingCompileTimeError # http://dartbug.com/33481
-void_type_override_test/02: MissingCompileTimeError
-void_type_override_test/03: MissingCompileTimeError
-void_type_usage_test/call_literal_list_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/call_void_init: MissingCompileTimeError
-void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError
-void_type_usage_test/conditional2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional2_null_equals2: MissingCompileTimeError
-void_type_usage_test/conditional2_void_init: MissingCompileTimeError
-void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError
-void_type_usage_test/conditional3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional3_null_equals2: MissingCompileTimeError
-void_type_usage_test/conditional3_void_init: MissingCompileTimeError
-void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError
-void_type_usage_test/conditional_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional_null_equals2: MissingCompileTimeError
-void_type_usage_test/conditional_void_init: MissingCompileTimeError
-void_type_usage_test/final_local_for_in2: MissingCompileTimeError
-void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/final_local_void_init: MissingCompileTimeError
-void_type_usage_test/global_literal_list_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/global_void_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance2_void_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance3_void_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_list_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance_void_init: MissingCompileTimeError
-void_type_usage_test/local_literal_list_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/local_void_init: MissingCompileTimeError
-void_type_usage_test/param_literal_list_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/param_void_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_list_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/paren_void_init: MissingCompileTimeError
+void/generalized_void_syntax_test: CompileTimeError # https://github.com/dart-lang/sdk/issues/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/final_local_for_in2: MissingCompileTimeError
+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/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
 web_int_literals_test/02: MissingCompileTimeError
 web_int_literals_test/03: MissingCompileTimeError
@@ -305,6 +265,4 @@
 type_promotion_functions_test/08: Pass
 type_promotion_functions_test/10: Pass
 vm/lazy_deopt_with_exception_test: CompileTimeError
-void_type_callbacks_test/00: MissingCompileTimeError # Issue 30177
-void_type_callbacks_test/01: MissingCompileTimeError # Issue 30177
-void_type_function_types_test/none: CompileTimeError # Issue 30177
+void/void_type_function_types_test/none: CompileTimeError # Issue 30177
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 88a2414..0d6f418 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -191,60 +191,12 @@
 type_promotion_functions_test/14: CompileTimeError # Issue 30895
 type_promotion_functions_test/none: CompileTimeError # Issue 30895
 type_variable_scope_test/none: CompileTimeError
-void_type_callbacks_test/00: MissingCompileTimeError # Issue 30514
-void_type_callbacks_test/01: MissingCompileTimeError
-void_type_function_types_test/none: CompileTimeError # Issue 30514
-void_type_override_test/02: MissingCompileTimeError
-void_type_override_test/03: MissingCompileTimeError
-void_type_usage_test/call_literal_list_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/call_void_init: MissingCompileTimeError
-void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError
-void_type_usage_test/conditional2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional2_null_equals2: MissingCompileTimeError
-void_type_usage_test/conditional2_void_init: MissingCompileTimeError
-void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError
-void_type_usage_test/conditional3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional3_null_equals2: MissingCompileTimeError
-void_type_usage_test/conditional3_void_init: MissingCompileTimeError
-void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError
-void_type_usage_test/conditional_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional_null_equals2: MissingCompileTimeError
-void_type_usage_test/conditional_void_init: MissingCompileTimeError
-void_type_usage_test/final_local_for_in2: MissingCompileTimeError
-void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/final_local_void_init: MissingCompileTimeError
-void_type_usage_test/global_literal_list_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/global_void_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance2_void_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance3_void_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_list_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance_void_init: MissingCompileTimeError
-void_type_usage_test/local_literal_list_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/local_void_init: MissingCompileTimeError
-void_type_usage_test/param_literal_list_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/param_void_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_list_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/paren_void_init: MissingCompileTimeError
+void/void_type_function_types_test/none: CompileTimeError # Issue 30177
+void/void_type_usage_test/final_local_for_in2: MissingCompileTimeError
+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
 
 [ $compiler == dartdevk ]
 additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 7a1f144..1b65936 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -411,208 +411,204 @@
 void/return_void_sync_error0_test: MissingCompileTimeError
 void/return_void_sync_error1_test: MissingCompileTimeError
 void/return_void_sync_error2_test: MissingCompileTimeError
-void_block_return_test/00: MissingCompileTimeError
-void_type_callbacks_test/00: MissingCompileTimeError
-void_type_callbacks_test/01: MissingCompileTimeError
-void_type_function_types_test/04: MissingCompileTimeError # Issue 32804
-void_type_function_types_test/06: MissingCompileTimeError # Issue 32804
-void_type_function_types_test/08: MissingCompileTimeError # Issue 32804
-void_type_override_test/03: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/call_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional2while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional3_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/conditional_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/final_local_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/global_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance2_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance3_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/instance_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/local_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/param_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_argument: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_cascade: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_do_while: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_dynamic_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_for_in: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_is: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_literal_list_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_literal_map_key_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_literal_map_key_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_literal_map_value_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_literal_map_value_init2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_null_dot: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_null_equals2: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_return: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_throw: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_toString: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_void_init: MissingCompileTimeError # Issue 32804
-void_type_usage_test/paren_while: MissingCompileTimeError # Issue 32804
+void/void_block_return_test/00: MissingCompileTimeError
+void/void_type_callbacks_test/00: MissingCompileTimeError
+void/void_type_callbacks_test/01: MissingCompileTimeError
+void/void_type_usage_test/call_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/call_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional2while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional3_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/conditional_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/final_local_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/global_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance2_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance3_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/instance_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/local_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/param_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_argument: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_cascade: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_do_while: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_dynamic_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_for_in: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_is: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_literal_list_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_literal_map_key_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_literal_map_key_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_literal_map_value_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_literal_map_value_init2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_null_dot: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_null_equals2: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_return: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_throw: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_toString: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_void_init: MissingCompileTimeError # Issue 32804
+void/void_type_usage_test/paren_while: MissingCompileTimeError # Issue 32804
 
 [ $compiler != dart2analyzer && $fasta && $strong ]
 map_literal3_test/03: MissingCompileTimeError
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index 14500fb..1761256 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -1040,7 +1040,7 @@
 vm/type_cast_vm_test: RuntimeError # Expects line and column numbers
 vm/type_vm_test: RuntimeError, Pass # Expects line and column numbers
 vm/type_vm_test: RuntimeError # Expects line and column numbers
-void_block_return_test/00: MissingCompileTimeError
+void/void_block_return_test/00: MissingCompileTimeError
 wrong_number_type_arguments_test/*: MissingCompileTimeError
 
 [ $compiler == precompiler && $runtime == dart_precompiled && $checked ]
diff --git a/tests/language_2/language_2_spec_parser.status b/tests/language_2/language_2_spec_parser.status
index 63f51af..3692117 100644
--- a/tests/language_2/language_2_spec_parser.status
+++ b/tests/language_2/language_2_spec_parser.status
@@ -61,4 +61,4 @@
 unary_plus_negative_test: Fail # Negative, uses non-existing unary plus.
 vm/debug_break_enabled_vm_test/01: Fail # Uses debug break.
 vm/debug_break_enabled_vm_test/none: Fail # Uses debug break.
-void_type_function_types_test: Skip # Not yet supported.
+void/void_type_function_types_test: Skip # Not yet supported.
diff --git a/tests/language_2/generalized_void_syntax_test.dart b/tests/language_2/void/generalized_void_syntax_test.dart
similarity index 89%
rename from tests/language_2/generalized_void_syntax_test.dart
rename to tests/language_2/void/generalized_void_syntax_test.dart
index 6ceb475..b720280 100644
--- a/tests/language_2/generalized_void_syntax_test.dart
+++ b/tests/language_2/void/generalized_void_syntax_test.dart
@@ -5,6 +5,18 @@
 // Testing that the reserved word `void` is allowed to occur as a type, not
 // just as a return type.
 
+typedef F = void Function(Object);
+typedef F2 = void Function([Object]);
+typedef F3 = void Function({Object x});
+
+typedef G = void Function(void);
+typedef G2 = void Function([void]);
+typedef G3 = void Function({void x});
+
+typedef H = int Function(void);
+typedef H2 = int Function([void]);
+typedef H3 = int Function({void x});
+
 class A<T> {
   final T t;
   const A(this.t);
diff --git a/tests/language_2/generalized_void_usage_test.dart b/tests/language_2/void/generalized_void_usage_test.dart
similarity index 100%
rename from tests/language_2/generalized_void_usage_test.dart
rename to tests/language_2/void/generalized_void_usage_test.dart
diff --git a/tests/language_2/void/return_void_async_test.dart b/tests/language_2/void/return_void_async_test.dart
index 2f9966b..1abcfec 100644
--- a/tests/language_2/void/return_void_async_test.dart
+++ b/tests/language_2/void/return_void_async_test.dart
@@ -13,6 +13,7 @@
   test3();
   test4();
   test5();
+  test6();
 }
 
 // Testing that a block bodied async function may have an empty return
@@ -47,3 +48,8 @@
 void test5() async {
   return null as dynamic;
 }
+
+// Testing that a block bodied async function may return FutureOr<void>
+void test6() async {
+  return null as FutureOr<void>;
+}
diff --git a/tests/language_2/void_arrow_return_test.dart b/tests/language_2/void/void_arrow_return_test.dart
similarity index 100%
rename from tests/language_2/void_arrow_return_test.dart
rename to tests/language_2/void/void_arrow_return_test.dart
diff --git a/tests/language_2/void_block_return_test.dart b/tests/language_2/void/void_block_return_test.dart
similarity index 100%
rename from tests/language_2/void_block_return_test.dart
rename to tests/language_2/void/void_block_return_test.dart
diff --git a/tests/language_2/void_check_test.dart b/tests/language_2/void/void_check_test.dart
similarity index 100%
rename from tests/language_2/void_check_test.dart
rename to tests/language_2/void/void_check_test.dart
diff --git a/tests/language_2/void_subtype_test.dart b/tests/language_2/void/void_subtype_test.dart
similarity index 100%
rename from tests/language_2/void_subtype_test.dart
rename to tests/language_2/void/void_subtype_test.dart
diff --git a/tests/language_2/void_type_callbacks_test.dart b/tests/language_2/void/void_type_callbacks_test.dart
similarity index 86%
rename from tests/language_2/void_type_callbacks_test.dart
rename to tests/language_2/void/void_type_callbacks_test.dart
index ea6fe9e..f8771a9 100644
--- a/tests/language_2/void_type_callbacks_test.dart
+++ b/tests/language_2/void/void_type_callbacks_test.dart
@@ -9,8 +9,7 @@
 class A<T> {
   T x;
 
-  foo(T x) {
-  }
+  foo(T x) {}
 
   T bar(T f()) {
     T tmp = f();
@@ -29,10 +28,10 @@
 
 main() {
   A<void> a = new A<void>();
-  a.foo(a.x);  //# 00: compile-time error
+  a.foo(a.x);
   a.bar(voidFun);
   Expect.equals(null, a.xAsObject());
-  a.x = a.bar(voidFun);  //# 01: compile-time error
+  a.x = a.bar(voidFun);
   a.gee(voidFun);
   Expect.equals(499, a.xAsObject());
   a.gee(intFun);
diff --git a/tests/language_2/void_type_function_types_test.dart b/tests/language_2/void/void_type_function_types_test.dart
similarity index 100%
rename from tests/language_2/void_type_function_types_test.dart
rename to tests/language_2/void/void_type_function_types_test.dart
diff --git a/tests/language_2/void_type_override_test.dart b/tests/language_2/void/void_type_override_test.dart
similarity index 97%
rename from tests/language_2/void_type_override_test.dart
rename to tests/language_2/void/void_type_override_test.dart
index 4b13843..8bf7999 100644
--- a/tests/language_2/void_type_override_test.dart
+++ b/tests/language_2/void/void_type_override_test.dart
@@ -59,7 +59,7 @@
   void foo() {}
   void bar() {}
   void gee(void x) {
-    use(x);  //# 03: compile-time error
+    use(x);
   }
 
   f(covariant C c) {}
diff --git a/tests/language_2/void_type_test.dart b/tests/language_2/void/void_type_test.dart
similarity index 100%
rename from tests/language_2/void_type_test.dart
rename to tests/language_2/void/void_type_test.dart
diff --git a/tests/language_2/void/void_type_usage_test.dart b/tests/language_2/void/void_type_usage_test.dart
new file mode 100644
index 0000000..bdfeca3
--- /dev/null
+++ b/tests/language_2/void/void_type_usage_test.dart
@@ -0,0 +1,585 @@
+// Copyright (c) 2017, 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.
+
+// Dart test for type checks on usage of expressions of type void.
+
+void use(dynamic x) { }
+void useAsVoid(void x) { }
+
+Object testVoidParam(void x) {
+  x;  //# param_stmt: ok
+  true ? x : x;  //# param_conditional: ok
+  for (x; false; x) {}   //# param_for: ok
+  useAsVoid(x); //# param_argument_void: ok
+  use(x);   //# param_argument: compile-time error
+  use(x as Object);  //# param_as: ok
+  void y = x;   //# param_void_init: ok
+  dynamic z = x;  //# param_dynamic_init: compile-time error
+  x is Object;   //# param_is: compile-time error
+  throw x;   //# param_throw: compile-time error
+  <void>[x];   //# param_literal_void_list_init: ok
+  <Object>[x];   //# param_literal_list_init: compile-time error
+  var m1 = <int, void>{4: x};   //# param_literal_map_value_init: ok
+  var m2 = <void, int>{x : 4};   //# param_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: x};  //# param_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{x : 4};  //# param_literal_map_key_init2: compile-time error
+  x ?? 499;  //# param_null_equals1: compile-time error
+  null ?? x;  //# param_null_equals2: ok
+  return x;   //# param_return: compile-time error
+  while (x) {};  //# param_while: compile-time error
+  do {} while (x);  //# param_do_while: compile-time error
+  for (var v in x) {}   //# param_for_in: compile-time error
+  for (x in [1, 2]) {}  //# param_for_in2: ok
+  x += 1;  //# param_plus_eq: compile-time error
+  x.toString();  //# param_toString: compile-time error
+  x?.toString();  //# param_null_dot: compile-time error
+  x..toString();  //# param_cascade: compile-time error
+  if (x) {}; //# param_conditional_stmt: compile-time error
+  !x; //# param_boolean_negation: compile-time error
+  x && true; //# param_boolean_and_left: compile-time error
+  true && x; //# param_boolean_and_right: compile-time error
+  x || true; //# param_boolean_or_left: compile-time error
+  true || x; //# param_boolean_or_right: compile-time error
+  x == 3; //# param_equals_left: compile-time error
+  3 == x; //# param_equals_right: compile-time error
+  identical(3, x); //# param_identical: compile-time error
+  3 + x; //# param_addition: compile-time error
+  3 * x; //# param_multiplication: compile-time error
+  -x; //# param_negation: compile-time error
+  x(3); //# param_use_as_function: compile-time error
+  "hello$x"; //# param_use_in_string_interpolation: compile-time error
+  x ??= 3; //# param_use_in_conditional_assignment_left: compile-time error
+  Object xx;  xx ??= x; //# param_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[x]; //# param_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[x]; //# param_use_in_map_lookup: compile-time error
+}
+
+testVoidAsync(void x) async {
+  await x; //# async_use_in_await: ok
+}
+
+testVoidAsyncStar(void x) async* {
+  yield x; //# async_use_in_yield: compile-time error
+  yield* x; //# async_use_in_yield_star: compile-time error
+  await for (var i in x) {} //# async_use_in_await_for: compile-time error
+}
+
+testVoidSyncStar(void x) sync* {
+  yield x; //# sync_use_in_yield: compile-time error
+  yield* x; //# sync_use_in_yield_star: compile-time error
+}
+
+const void c = null;
+
+dynamic testVoidDefaultParameter([int y = c]) {} //# void_default_parameter_global: compile-time error
+
+dynamic testVoidDefaultParameterClosure() {
+  ([int y = c]) => 3;//# void_default_parameter_closure: compile-time error
+}
+
+dynamic testVoidParamDynamic(void x) {
+  return x;   //# param_return_dynamic: ok
+}
+
+Object testVoidCall(void f()) {
+  f();  //# call_stmt: ok
+  true ? f() : f();  //# call_conditional: ok
+  for (f(); false; f()) {}   //# call_for: ok
+  useAsVoid(f()); //# call_argument_void: ok
+  use(f());   //# call_argument: compile-time error
+  use(f() as Object);  //# call_as: ok
+  void y = f();   //# call_void_init: ok
+  dynamic z = f();  //# call_dynamic_init: compile-time error
+  f() is Object;   //# call_is: compile-time error
+  throw f();   //# call_throw: compile-time error
+  <void>[f()];   //# call_literal_void_list_init: ok
+  <Object>[f()];   //# call_literal_list_init: compile-time error
+  var m1 = <int, void>{4: f() };   //# call_literal_map_value_init: ok
+  var m2 = <void, int>{ f(): 4};   //# call_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: f() };  //# call_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ f(): 4};  //# call_literal_map_key_init2: compile-time error
+  f() ?? 499;  //# call_null_equals1: compile-time error
+  null ?? f();  //# call_null_equals2: ok
+  return f();   //# call_return: compile-time error
+  while (f()) {};  //# call_while: compile-time error
+  do {} while (f());  //# call_do_while: compile-time error
+  for (var v in f()) {}   //# call_for_in: compile-time error
+  f().toString();  //# call_toString: compile-time error
+  f()?.toString();  //# call_null_dot: compile-time error
+  f()..toString();  //# call_cascade: compile-time error
+  if (f()) {}; //# call_conditional_stmt: compile-time error
+  !f(); //# call_boolean_negation: compile-time error
+  f() && true; //# call_boolean_and_left: compile-time error
+  true && f(); //# call_boolean_and_right: compile-time error
+  f() || true; //# call_boolean_or_left: compile-time error
+  true || f(); //# call_boolean_or_right: compile-time error
+  f() == 3; //# call_equals_left: compile-time error
+  3 == f(); //# call_equals_right: compile-time error
+  identical(3, f()); //# call_identical: compile-time error
+  3 + f(); //# call_addition: compile-time error
+  3 * f(); //# call_multiplication: compile-time error
+  -f(); //# call_negation: compile-time error
+  f()(3); //# call_use_as_function: compile-time error
+  "hello${f()}"; //# call_use_in_string_interpolation: compile-time error
+  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
+}
+
+dynamic testVoidCallDynamic(void f()) {
+  return f();   //# call_return: ok
+}
+
+Object testVoidLocal() {
+  void x;
+  x = 42;   //# local_assign: ok
+  x;  //# local_stmt: ok
+  true ? x : x;  //# local_conditional: ok
+  for (x; false; x) {}   //# local_for: ok
+  useAsVoid(x); //# local_argument_void: ok
+  use(x);   //# local_argument: compile-time error
+  use(x as Object);  //# local_as: ok
+  void y = x;   //# local_void_init: ok
+  dynamic z = x;  //# local_dynamic_init: compile-time error
+  x is Object;   //# local_is: compile-time error
+  throw x;   //# local_throw: compile-time error
+  <void>[x];   //# local_literal_void_list_init: ok
+  <Object>[x];   //# local_literal_list_init: compile-time error
+  var m1 = <int, void>{4: x};   //# local_literal_map_value_init: ok
+  var m2 = <void, int>{x : 4};   //# local_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: x};  //# local_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{x : 4};  //# local_literal_map_key_init2: compile-time error
+  x ?? 499;  //# local_null_equals1: compile-time error
+  null ?? x;  //# local_null_equals2: ok
+  return x;   //# local_return: compile-time error
+  while (x) {};  //# local_while: compile-time error
+  do {} while (x);  //# local_do_while: compile-time error
+  for (var v in x) {}   //# local_for_in: compile-time error
+  for (x in [1, 2]) {}  //# local_for_in2: ok
+  x += 1;  //# local_plus_eq: compile-time error
+  x.toString();  //# local_toString: compile-time error
+  x?.toString();  //# local_null_dot: compile-time error
+  x..toString();  //# local_cascade: compile-time error
+   if (x) {}; //# local_conditional_stmt: compile-time error
+  !x; //# local_boolean_negation: compile-time error
+  x && true; //# local_boolean_and_left: compile-time error
+  true && x; //# local_boolean_and_right: compile-time error
+  x || true; //# local_boolean_or_left: compile-time error
+  true || x; //# local_boolean_or_right: compile-time error
+  x == 3; //# local_equals_left: compile-time error
+  3 == x; //# local_equals_right: compile-time error
+  identical(3, x); //# local_identical: compile-time error
+  3 + x; //# local_addition: compile-time error
+  3 * x; //# local_multiplication: compile-time error
+  -x; //# local_negation: compile-time error
+  x(3); //# local_use_as_function: compile-time error
+  "hello$x"; //# local_use_in_string_interpolation: compile-time error
+  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
+}
+
+dynamic testVoidLocalDynamic() {
+  void x;
+  return x;   //# local_return_dynamic: ok
+}
+
+Object testVoidFinalLocal() {
+  final void x = null;
+  x = 42;   //# final_local_assign: compile-time error
+  x;  //# final_local_stmt: ok
+  true ? x : x;  //# final_local_conditional: ok
+  for (x; false; x) {}   //# final_local_for: ok
+  useAsVoid(x); //# final_local_argument_void: ok
+  use(x);   //# final_local_argument: compile-time error
+  use(x as Object);  //# final_local_as: ok
+  void y = x;   //# final_local_void_init: ok
+  dynamic z = x;  //# final_local_dynamic_init: compile-time error
+  x is Object;   //# final_local_is: compile-time error
+  throw x;   //# final_local_throw: compile-time error
+  <void>[x];   //# final_local_literal_void_list_init: ok
+  <Object>[x];   //# final_local_literal_list_init: compile-time error
+  var m1 = <int, void>{4: x};   //# final_local_literal_map_value_init: ok
+  var m2 = <void, int>{x : 4};   //# final_local_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: x};  //# final_local_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{x : 4};  //# final_local_literal_map_key_init2: compile-time error
+  x ?? 499;  //# final_local_null_equals1: compile-time error
+  null ?? x;  //# final_local_null_equals2: ok
+  return x;   //# final_local_return: compile-time error
+  while (x) {};  //# final_local_while: compile-time error
+  do {} while (x);  //# final_local_do_while: compile-time error
+  for (var v in x) {}   //# final_local_for_in: compile-time error
+  for (x in [1, 2]) {}  //# final_local_for_in2: compile-time error
+  x += 1;  //# final_local_plus_eq: compile-time error
+  x.toString();  //# final_local_toString: compile-time error
+  x?.toString();  //# final_local_null_dot: compile-time error
+  x..toString();  //# final_local_cascade: compile-time error
+   if (x) {}; //# final_local_conditional_stmt: compile-time error
+  !x; //# final_local_boolean_negation: compile-time error
+  x && true; //# final_local_boolean_and_left: compile-time error
+  true && x; //# final_local_boolean_and_right: compile-time error
+  x || true; //# final_local_boolean_or_left: compile-time error
+  true || x; //# final_local_boolean_or_right: compile-time error
+  x == 3; //# final_local_equals_left: compile-time error
+  3 == x; //# final_local_equals_right: compile-time error
+  identical(3, x); //# final_local_identical: compile-time error
+  3 + x; //# final_local_addition: compile-time error
+  3 * x; //# final_local_multiplication: compile-time error
+  -x; //# final_local_negation: compile-time error
+  x(3); //# final_local_use_as_function: compile-time error
+  "hello$x"; //# final_local_use_in_string_interpolation: compile-time error
+  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
+}
+
+dynamic testVoidFinalLocalDynamic() {
+  final void x = null;
+  return x;   //# final_local_return_dynamic: ok
+}
+
+void global;
+Object testVoidGlobal() {
+  global;  //# global_stmt: ok
+  true ? global : global;  //# global_conditional: ok
+  for (global; false; global) {}   //# global_for: ok
+  useAsVoid(global); //# global_argument_void: ok
+  use(global);   //# global_argument: compile-time error
+  use(global as Object);  //# global_as: ok
+  void y = global;   //# global_void_init: ok
+  dynamic z = global;  //# global_dynamic_init: compile-time error
+  global is Object;   //# global_is: compile-time error
+  throw global;   //# global_throw: compile-time error
+  <void>[global];   //# global_literal_void_list_init: ok
+  <Object>[global];   //# global_literal_list_init: compile-time error
+  var m1 = <int, void>{4: global };   //# global_literal_map_value_init: ok
+  var m2 = <void, int>{ global: 4};   //# global_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: global };  //# global_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ global: 4};  //# global_literal_map_key_init2: compile-time error
+  null ?? global;  //# global_null_equals1: ok
+  global ?? 499;  //# global_null_equals2: compile-time error
+  return global;   //# global_return: compile-time error
+  while (global) {};  //# global_while: compile-time error
+  do {} while (global);  //# global_do_while: compile-time error
+  for (var v in global) {}   //# global_for_in: compile-time error
+  for (global in [1, 2]) {}  //# global_for_in2: ok
+  global += 1;  //# global_plus_eq: compile-time error
+  global.toString();  //# global_toString: compile-time error
+  global?.toString();  //# global_null_dot: compile-time error
+  global..toString();  //# global_cascade: compile-time error
+  if (global) {}; //# global_conditional_stmt: compile-time error
+  !global; //# global_boolean_negation: compile-time error
+  global && true; //# global_boolean_and_left: compile-time error
+  true && global; //# global_boolean_and_right: compile-time error
+  global || true; //# global_boolean_or_left: compile-time error
+  true || global; //# global_boolean_or_right: compile-time error
+  global == 3; //# global_equals_left: compile-time error
+  3 == global; //# global_equals_right: compile-time error
+  identical(3, global); //# global_identical: compile-time error
+  3 + global; //# global_addition: compile-time error
+  3 * global; //# global_multiplication: compile-time error
+  -global; //# global_negation: compile-time error
+  global(3); //# global_use_as_function: compile-time error
+  "hello$global"; //# global_use_in_string_interpolation: compile-time error
+  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
+}
+
+dynamic testVoidGlobalDynamic() {
+  return global;   //# global_return_dynamic: ok
+}
+
+Object testVoidConditional() {
+  void x;
+  (true ? x : x);   //# conditional_parens: ok
+  true ? x : x;  //# conditional_stmt: ok
+  true ? true ? x : x : true ? x : x;  //# conditional_conditional: ok
+  for (true ? x : x; false; true ? x : x) {}   //# conditional_for: ok
+  useAsVoid(true ? x : x); //# conditional_argument_void: ok
+  use(true ? x : x);   //# conditional_argument: compile-time error
+  void y = true ? x : x;   //# conditional_void_init: ok
+  dynamic z = true ? x : x;  //# conditional_dynamic_init: compile-time error
+  throw true ? x : x;   //# conditional_throw: compile-time error
+  <void>[true ? x : x];   //# conditional_literal_void_list_init: ok
+  <Object>[true ? x : x];   //# conditional_literal_list_init: compile-time error
+  var m1 = <int, void>{4: true ? x : x};   //# conditional_literal_map_value_init: ok
+  var m3 = <dynamic, dynamic>{4: true ? x : x};  //# conditional_literal_map_value_init2: compile-time error
+  (true ? x : x) ?? null;  //# conditional_null_equals1: compile-time error
+  null ?? (true ? x : x);  //# conditional_null_equals2: ok
+  return true ? x : x;   //# conditional_return: compile-time error
+  while (true ? x : x) {};  //# conditional_while: compile-time error
+  do {} while (true ? x : x);  //# conditional_do_while: compile-time error
+  for (var v in true ? x : x) {}   //# conditional_for_in: compile-time error
+
+  (true ? 499 : x);   //# conditional2_parens: ok
+  true ? 499 : x;  //# conditional2_stmt: ok
+  true ? true ? 499 : x : true ? 499 : x;  //# conditional2_conditional: ok
+  for (true ? 499 : x; false; true ? 499 : x) {}   //# conditional2_for: ok
+  useAsVoid(true ? 499 : x); //# conditional2_argument_void: ok
+  use(true ? 499 : x);   //# conditional2_argument: compile-time error
+  void y2 = true ? 499 : x;   //# conditional2_void_init: ok
+  dynamic z2 = true ? 499 : x;  //# conditional2_dynamic_init: compile-time error
+  throw true ? 499 : x;   //# conditional2_throw: compile-time error
+  <void>[true ? 499 : x];   //# conditional2_literal_void_list_init: ok
+  <Object>[true ? 499 : x];   //# conditional2_literal_list_init: compile-time error
+  var m12 = <int, void>{4: true ? 499 : x};   //# conditional2_literal_map_value_init: ok
+  var m32 = <dynamic, dynamic>{4: true ? 499 : x};  //# conditional2_literal_map_value_init2: compile-time error
+  (true ? 499 : x) ?? null;  //# conditional2_null_equals1: compile-time error
+  null ?? (true ? 499 : x);  //# conditional2_null_equals2: ok
+  return true ? 499 : x;   //# conditional2_return: compile-time error
+  while (true ? 499 : x) {};  //# conditional2while: compile-time error
+  do {} while (true ? 499 : x);  //# conditional2do_while: compile-time error
+  for (var v in true ? 499 : x) {}   //# conditional2for_in: compile-time error
+
+  (true ? x : 499);   //# conditional3_parens: ok
+  true ? x : 499;  //# conditional3_stmt: ok
+  true ? true ? x : 499 : true ? x : 499;  //# conditional3_conditional: ok
+  for (true ? x : 499; false; true ? x : 499) {}   //# conditional3_for: ok
+  useAsVoid(true ? x : 499); //# conditional3_argument_void: ok
+  use(true ? x : 499);   //# conditional3_argument: compile-time error
+  void y3 = true ? x : 499;   //# conditional3_void_init: ok
+  dynamic z3 = true ? x : 499;  //# conditional3_dynamic_init: compile-time error
+  throw true ? x : 499;   //# conditional3_throw: compile-time error
+  <void>[true ? x : 499];   //# conditional3_literal_void_list_init: ok
+  <Object>[true ? x : 499];   //# conditional3_literal_list_init: compile-time error
+  var m13 = <int, void>{4: true ? x : 499 };   //# conditional3_literal_map_value_init: ok
+  var m33 = <dynamic, dynamic>{4: true ? x : 499 };  //# conditional3_literal_map_value_init2: compile-time error
+  (true ? x : 499) ?? null;  //# conditional3_null_equals1: compile-time error
+  null ?? (true ? x : 499);  //# conditional3_null_equals2: ok
+  return true ? x : 499;   //# conditional3_return: compile-time error
+  while (true ? x : 499) {};  //# conditional_while: compile-time error
+  do {} while (true ? x : 499);  //# conditional_do_while: compile-time error
+  for (var v in true ? x : 499) {}   //# conditional_for_in: compile-time error
+}
+
+dynamic testVoidConditionalDynamic() {
+  void x;
+  return true ? x : x;   //# conditional_return_dynamic: ok
+  return true ? 499 : x;   //# conditional2_return_dynamic: ok
+  return true ? x : 499;   //# conditional3_return_dynamic: ok
+}
+
+class A<T> {
+  T x;
+
+  void foo() {}
+}
+
+class B implements A<void> {
+  void x;
+
+  int foo() => 499;
+
+  void forInTest() {
+    for (x in <void>[]) {}  //# instance2_for_in2: ok
+    for (x in [1, 2]) {}  //# instance2_for_in3: ok
+  }
+}
+
+class C implements A<void> {
+  void get x => null;
+  set x(void y) {}
+
+  void foo() {}
+
+  void forInTest() {
+    for (x in <void>[]) {}  //# instance3_for_in2: ok
+    for (x in [1, 2]) {}  //# instance3_for_in3: ok
+  }
+}
+
+Object testInstanceField() {
+  A<void> a = new A<void>();
+  a.x = 499;  //# field_assign: ok
+  a.x;  //# instance_stmt: ok
+  true ? a.x : a.x;  //# instance_conditional: ok
+  for (a.x; false; a.x) {}   //# instance_for: ok
+  useAsVoid(a.x); //# instance_argument_void: ok
+  use(a.x);   //# instance_argument: compile-time error
+  use(a.x as Object);  //# instance_as: ok
+  void y = a.x;   //# instance_void_init: ok
+  dynamic z = a.x;  //# instance_dynamic_init: compile-time error
+  a.x is Object;   //# instance_is: compile-time error
+  throw a.x;   //# instance_throw: compile-time error
+  <void>[a.x];   //# instance_literal_void_list_init: ok
+  <Object>[a.x];   //# instance_literal_list_init: compile-time error
+  var m1 = <int, void>{4: a.x};   //# instance_literal_map_value_init: ok
+  var m2 = <void, int>{ a.x : 4};   //# instance_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: a.x};  //# instance_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ a.x : 4};  //# instance_literal_map_key_init2: compile-time error
+  null ?? a.x;  //# instance_null_equals1: ok
+  a.x ?? 499;  //# instance_null_equals2: compile-time error
+  return a.x;   //# instance_return: compile-time error
+  while (a.x) {};  //# instance_while: compile-time error
+  do {} while (a.x);  //# instance_do_while: compile-time error
+  for (var v in a.x) {}   //# instance_for_in: compile-time error
+  a.x += 1;  //# instance_plus_eq: compile-time error
+  a.x.toString();  //# instance_toString: compile-time error
+  a.x?.toString();  //# instance_null_dot: compile-time error
+  a.x..toString();  //# instance_cascade: compile-time error
+
+  B b = new B();
+  b.x = 42;   //# field_assign2: ok
+  b.x;  //# instance2_stmt: ok
+  true ? b.x : b.x;  //# instance2_conditional: ok
+  for (b.x; false; b.x) {}   //# instance2_for: ok
+  useAsVoid(b.x); //# instance2_argument_void: ok
+  use(b.x);   //# instance2_argument: compile-time error
+  use(b.x as Object);  //# instance2_as: ok
+  void y2 = b.x;   //# instance2_void_init: ok
+  dynamic z2 = b.x;  //# instance2_dynamic_init: compile-time error
+  b.x is Object;   //# instance2_is: compile-time error
+  throw b.x;   //# instance2_throw: compile-time error
+  <void>[b.x];   //# instance2_literal_void_list_init: ok
+  <Object>[b.x];   //# instance2_literal_list_init: compile-time error
+  var m12 = <int, void>{4: b.x};   //# instance2_literal_map_value_init: ok
+  var m22 = <void, int>{ b.x : 4};   //# instance2_literal_map_key_init: ok
+  var m32 = <dynamic, dynamic>{4: b.x};  //# instance2_literal_map_value_init2: compile-time error
+  var m42 = <dynamic, dynamic>{ b.x : 4};  //# instance2_literal_map_key_init2: compile-time error
+  null ?? b.x;  //# instance2_null_equals1: ok
+  b.x ?? 499;  //# instance2_null_equals2: compile-time error
+  return b.x;   //# instance2_return: compile-time error
+  while (b.x) {};  //# instance2_while: compile-time error
+  do {} while (b.x);  //# instance2_do_while: compile-time error
+  for (var v in b.x) {}   //# instance2_for_in: compile-time error
+  b.forInTest();
+  b.x += 1;  //# instance2_plus_eq: compile-time error
+  b.x.toString();  //# instance2_toString: compile-time error
+  b.x?.toString();  //# instance2_null_dot: compile-time error
+  b.x..toString();  //# instance2_cascade: compile-time error
+
+  C c = new C();
+  c.x = 32;   //# setter_assign: ok
+  c.x;  //# instance3_stmt: ok
+  true ? c.x : c.x;  //# instance3_conditional: ok
+  for (c.x; false; c.x) {}   //# instance3_for: ok
+  useAsVoid(c.x); //# instance3_argument_void: ok
+  use(c.x);   //# instance3_argument: compile-time error
+  use(c.x as Object);  //# instance3_as: ok
+  void y3 = c.x;   //# instance3_void_init: ok
+  dynamic z3 = c.x;  //# instance3_dynamic_init: compile-time error
+  c.x is Object;   //# instance3_is: compile-time error
+  throw c.x;   //# instance3_throw: compile-time error
+  <void>[c.x];   //# instance3_literal_void_list_init: ok
+  <Object>[c.x];   //# instance3_literal_list_init: compile-time error
+  var m13 = <int, void>{4: c.x};   //# instance3_literal_map_value_init: ok
+  var m23 = <void, int>{ c.x : 4};   //# instance3_literal_map_key_init: ok
+  var m33 = <dynamic, dynamic>{4: c.x};  //# instance3_literal_map_value_init2: compile-time error
+  var m43 = <dynamic, dynamic>{ c.x : 4};  //# instance3_literal_map_key_init2: compile-time error
+  null ?? c.x;  //# instance3_null_equals1: ok
+  c.x ?? 499;  //# instance3_null_equals2: compile-time error
+  return c.x;   //# instance3_return: compile-time error
+  while (c.x) {};  //# instance3_while: compile-time error
+  do {} while (c.x);  //# instance3_do_while: compile-time error
+  for (var v in c.x) {}   //# instance3_for_in: compile-time error
+  c.forInTest();
+  c.x += 1;  //# instance3_plus_eq: compile-time error
+  c.x.toString();  //# instance3_toString: compile-time error
+  c.x?.toString();  //# instance3_null_dot: compile-time error
+  c.x..toString();  //# instance3_cascade: compile-time error
+}
+
+dynamic testInstanceFieldDynamic() {
+  A<void> a = new A<void>();
+  return a.x;   //# instance_return_dynamic: ok
+
+  B b = new B();
+  return b.x;   //# instance2_return_dynamic: ok
+
+  C c = new C();
+  return c.x;   //# instance3_return_dynamic: ok
+}
+
+Object testParenthesized() {
+  void x;
+  (x);  //# paren_stmt: ok
+  true ? (x) : (x);  //# paren_conditional: ok
+  for ((x); false; (x)) {}   //# paren_for: ok
+  useAsVoid((x)); //# paren_argument_void: ok
+  use((x));   //# paren_argument: compile-time error
+  use((x) as Object);  //# paren_as: ok
+  void y = (x);   //# paren_void_init: ok
+  dynamic z = (x);  //# paren_dynamic_init: compile-time error
+  (x) is Object;   //# paren_is: compile-time error
+  throw (x);   //# paren_throw: compile-time error
+  <void>[(x)];   //# paren_literal_void_list_init: ok
+  <Object>[(x)];   //# paren_literal_list_init: compile-time error
+  var m1 = <int, void>{4: (x) };   //# paren_literal_map_value_init: ok
+  var m2 = <void, int>{ (x): 4};   //# paren_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: (x) };  //# paren_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ (x): 4};  //# paren_literal_map_key_init2: compile-time error
+  (x) ?? 499;  //# paren_null_equals1: compile-time error
+  null ?? (x);  //# paren_null_equals2: ok
+  return (x);   //# paren_return: compile-time error
+  while ((x)) {};  //# paren_while: compile-time error
+  do {} while ((x));  //# paren_do_while: compile-time error
+  for (var v in (x)) {}   //# paren_for_in: compile-time error
+  (x).toString();  //# paren_toString: compile-time error
+  (x)?.toString();  //# paren_null_dot: compile-time error
+  (x)..toString();  //# paren_cascade: compile-time error
+   if ((x)) {}; //# paren_conditional_stmt: compile-time error
+  !(x); //# paren_boolean_negation: compile-time error
+  (x) && true; //# paren_boolean_and_left: compile-time error
+  true && (x); //# paren_boolean_and_right: compile-time error
+  (x) || true; //# paren_boolean_or_left: compile-time error
+  true || (x); //# paren_boolean_or_right: compile-time error
+  (x) == 3; //# paren_equals_left: compile-time error
+  3 == (x); //# paren_equals_right: compile-time error
+  identical(3, (x)); //# paren_identical: compile-time error
+  3 + (x); //# paren_addition: compile-time error
+  3 * (x); //# paren_multiplication: compile-time error
+  -(x); //# paren_negation: compile-time error
+  (x)(3); //# paren_use_as_function: compile-time error
+  "hello${(x)}"; //# paren_use_in_string_interpolation: compile-time error
+  (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
+}
+
+dynamic testParenthesizedDynamic() {
+  void x;
+  return (x);   //# paren_return_dynamic: ok
+}
+
+void testReturnToVoid(void x, void f()) {
+  void y;
+  final void z = null;
+  A<void> a = new A<void>();
+  B b = new B();
+  C c = new C();
+  return x;   //# param_return_to_void: ok
+  return f();   //# call_return_to_void: ok
+  return y;   //# local_return_to_void: ok
+  return z;   //# final_local_return_to_void: ok
+  return global;   //# global_return_to_void: ok
+  return true ? x : x;   //# conditional_return_to_void: ok
+  return true ? 499 : x;   //# conditional2_return_to_void: ok
+  return true ? x : 499;   //# conditional3_return_to_void: ok
+  return a.x;   //# instance_return_to_void: ok
+  return b.x;   //# instance2_return_to_void: ok
+  return c.x;   //# instance3_return_to_void: ok
+  return (x);   //# paren_return_to_void: ok
+}
+
+main() {
+  try {
+    testVoidParam(499);
+    testVoidCall(() {});
+    testVoidLocal();
+    testVoidFinalLocal();
+    testVoidConditional();
+    testInstanceField();
+    testParenthesized();
+    testReturnToVoid(499, () {});
+  } catch (e) {
+    // Silently eat all dynamic errors.
+    // This test is only testing static analysis.
+  }
+}
diff --git a/tests/language_2/void_type_usage_test.dart b/tests/language_2/void_type_usage_test.dart
deleted file mode 100644
index 8d25350..0000000
--- a/tests/language_2/void_type_usage_test.dart
+++ /dev/null
@@ -1,426 +0,0 @@
-// Copyright (c) 2017, 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.
-
-// Dart test for type checks on usage of expressions of type void.
-
-void use(dynamic x) { }
-
-Object testVoidParam(void x) {
-  x;  //# param_stmt: ok
-  true ? x : x;  //# param_conditional: ok
-  for (x; false; x) {}   //# param_for: ok
-  use(x);   //# param_argument: compile-time error
-  use(x as Object);  //# param_as: ok
-  void y = x;   //# param_void_init: compile-time error
-  dynamic z = x;  //# param_dynamic_init: compile-time error
-  x is Object;   //# param_is: compile-time error
-  throw x;   //# param_throw: compile-time error
-  [x];   //# param_literal_list_init: compile-time error
-  var m1 = {4: x};   //# param_literal_map_value_init: compile-time error
-  var m2 = {x : 4};   //# param_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: x};  //# param_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = {x : 4};  //# param_literal_map_key_init2: compile-time error
-  x ?? 499;  //# param_null_equals2: compile-time error
-  null ?? x;  //# param_null_equals2: compile-time error
-  return x;   //# param_return: compile-time error
-  while (x) {};  //# param_while: compile-time error
-  do {} while (x);  //# param_do_while: compile-time error
-  for (var v in x) {}   //# param_for_in: compile-time error
-  for (x in [1, 2]) {}  //# param_for_in2: ok
-  x += 1;  //# param_plus_eq: compile-time error
-  x.toString();  //# param_toString: compile-time error
-  x?.toString();  //# param_null_dot: compile-time error
-  x..toString();  //# param_cascade: compile-time error
-}
-
-dynamic testVoidParamDynamic(void x) {
-  return x;   //# param_return_dynamic: ok
-}
-
-Object testVoidCall(void f()) {
-  f();  //# call_stmt: ok
-  true ? f() : f();  //# call_conditional: ok
-  for (f(); false; f()) {}   //# call_for: ok
-  use(f());   //# call_argument: compile-time error
-  use(f() as Object);  //# call_as: ok
-  void y = f();   //# call_void_init: compile-time error
-  dynamic z = f();  //# call_dynamic_init: compile-time error
-  f() is Object;   //# call_is: compile-time error
-  throw f();   //# call_throw: compile-time error
-  [f()];   //# call_literal_list_init: compile-time error
-  var m1 = {4: f() };   //# call_literal_map_value_init: compile-time error
-  var m2 = { f(): 4};   //# call_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: f() };  //# call_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = { f(): 4};  //# call_literal_map_key_init2: compile-time error
-  f() ?? 499;  //# call_null_equals2: compile-time error
-  null ?? f();  //# call_null_equals2: compile-time error
-  return f();   //# call_return: compile-time error
-  while (f()) {};  //# call_while: compile-time error
-  do {} while (f());  //# call_do_while: compile-time error
-  for (var v in f()) {}   //# call_for_in: compile-time error
-  f().toString();  //# call_toString: compile-time error
-  f()?.toString();  //# call_null_dot: compile-time error
-  f()..toString();  //# call_cascade: compile-time error
-}
-
-dynamic testVoidCallDynamic(void f()) {
-  return f();   //# call_return: ok
-}
-
-Object testVoidLocal() {
-  void x;
-  x = 42;   //# local_assign: ok
-  x;  //# local_stmt: ok
-  true ? x : x;  //# local_conditional: ok
-  for (x; false; x) {}   //# local_for: ok
-  use(x);   //# local_argument: compile-time error
-  use(x as Object);  //# local_as: ok
-  void y = x;   //# local_void_init: compile-time error
-  dynamic z = x;  //# local_dynamic_init: compile-time error
-  x is Object;   //# local_is: compile-time error
-  throw x;   //# local_throw: compile-time error
-  [x];   //# local_literal_list_init: compile-time error
-  var m1 = {4: x};   //# local_literal_map_value_init: compile-time error
-  var m2 = {x : 4};   //# local_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: x};  //# local_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = {x : 4};  //# local_literal_map_key_init2: compile-time error
-  x ?? 499;  //# local_null_equals2: compile-time error
-  null ?? x;  //# local_null_equals2: compile-time error
-  return x;   //# local_return: compile-time error
-  while (x) {};  //# local_while: compile-time error
-  do {} while (x);  //# local_do_while: compile-time error
-  for (var v in x) {}   //# local_for_in: compile-time error
-  for (x in [1, 2]) {}  //# local_for_in2: ok
-  x += 1;  //# local_plus_eq: compile-time error
-  x.toString();  //# local_toString: compile-time error
-  x?.toString();  //# local_null_dot: compile-time error
-  x..toString();  //# local_cascade: compile-time error
-}
-
-dynamic testVoidLocalDynamic() {
-  void x;
-  return x;   //# local_return_dynamic: ok
-}
-
-Object testVoidFinalLocal() {
-  final void x = null;
-  x = 42;   //# final_local_assign: compile-time error
-  x;  //# final_local_stmt: ok
-  true ? x : x;  //# final_local_conditional: ok
-  for (x; false; x) {}   //# final_local_for: ok
-  use(x);   //# final_local_argument: compile-time error
-  use(x as Object);  //# final_local_as: ok
-  void y = x;   //# final_local_void_init: compile-time error
-  dynamic z = x;  //# final_local_dynamic_init: compile-time error
-  x is Object;   //# final_local_is: compile-time error
-  throw x;   //# final_local_throw: compile-time error
-  [x];   //# final_local_literal_list_init: compile-time error
-  var m1 = {4: x};   //# final_local_literal_map_value_init: compile-time error
-  var m2 = {x : 4};   //# final_local_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: x};  //# final_local_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = {x : 4};  //# final_local_literal_map_key_init2: compile-time error
-  x ?? 499;  //# final_local_null_equals2: compile-time error
-  null ?? x;  //# final_local_null_equals2: compile-time error
-  return x;   //# final_local_return: compile-time error
-  while (x) {};  //# final_local_while: compile-time error
-  do {} while (x);  //# final_local_do_while: compile-time error
-  for (var v in x) {}   //# final_local_for_in: compile-time error
-  for (x in [1, 2]) {}  //# final_local_for_in2: compile-time error
-  x += 1;  //# final_local_plus_eq: compile-time error
-  x.toString();  //# final_local_toString: compile-time error
-  x?.toString();  //# final_local_null_dot: compile-time error
-  x..toString();  //# final_local_cascade: compile-time error
-}
-
-dynamic testVoidFinalLocalDynamic() {
-  final void x = null;
-  return x;   //# final_local_return_dynamic: ok
-}
-
-void global;
-Object testVoidGlobal() {
-  global;  //# global_stmt: ok
-  true ? global : global;  //# global_conditional: ok
-  for (global; false; global) {}   //# global_for: ok
-  use(global);   //# global_argument: compile-time error
-  use(global as Object);  //# global_as: ok
-  void y = global;   //# global_void_init: compile-time error
-  dynamic z = global;  //# global_dynamic_init: compile-time error
-  global is Object;   //# global_is: compile-time error
-  throw global;   //# global_throw: compile-time error
-  [global];   //# global_literal_list_init: compile-time error
-  var m1 = {4: global };   //# global_literal_map_value_init: compile-time error
-  var m2 = { global: 4};   //# global_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: global };  //# global_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = { global: 4};  //# global_literal_map_key_init2: compile-time error
-  null ?? global;  //# global_null_equals2: compile-time error
-  global ?? 499;  //# global_null_equals2: compile-time error
-  return global;   //# global_return: compile-time error
-  while (global) {};  //# global_while: compile-time error
-  do {} while (global);  //# global_do_while: compile-time error
-  for (var v in global) {}   //# global_for_in: compile-time error
-  for (global in [1, 2]) {}  //# global_for_in2: ok
-  global += 1;  //# global_plus_eq: compile-time error
-  global.toString();  //# global_toString: compile-time error
-  global?.toString();  //# global_null_dot: compile-time error
-  global..toString();  //# global_cascade: compile-time error
-}
-
-dynamic testVoidGlobalDynamic() {
-  return global;   //# global_return_dynamic: ok
-}
-
-Object testVoidConditional() {
-  void x;
-  (true ? x : x);   //# conditional_parens: ok
-  true ? x : x;  //# conditional_stmt: ok
-  true ? true ? x : x : true ? x : x;  //# conditional_conditional: ok
-  for (true ? x : x; false; true ? x : x) {}   //# conditional_for: ok
-  use(true ? x : x);   //# conditional_argument: compile-time error
-  void y = true ? x : x;   //# conditional_void_init: compile-time error
-  dynamic z = true ? x : x;  //# conditional_dynamic_init: compile-time error
-  throw true ? x : x;   //# conditional_throw: compile-time error
-  [true ? x : x];   //# conditional_literal_list_init: compile-time error
-  var m1 = {4: true ? x : x};   //# conditional_literal_map_value_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: true ? x : x};  //# conditional_literal_map_value_init2: compile-time error
-  null ?? (true ? x : x);  //# conditional_null_equals2: compile-time error
-  return true ? x : x;   //# conditional_return: compile-time error
-  while (true ? x : x) {};  //# conditional_while: compile-time error
-  do {} while (true ? x : x);  //# conditional_do_while: compile-time error
-  for (var v in true ? x : x) {}   //# conditional_for_in: compile-time error
-
-  (true ? 499 : x);   //# conditional2_parens: ok
-  true ? 499 : x;  //# conditional2_stmt: ok
-  true ? true ? 499 : x : true ? 499 : x;  //# conditional2_conditional: ok
-  for (true ? 499 : x; false; true ? 499 : x) {}   //# conditional2_for: ok
-  use(true ? 499 : x);   //# conditional2_argument: compile-time error
-  void y2 = true ? 499 : x;   //# conditional2_void_init: compile-time error
-  dynamic z2 = true ? 499 : x;  //# conditional2_dynamic_init: compile-time error
-  throw true ? 499 : x;   //# conditional2_throw: compile-time error
-  [true ? 499 : x];   //# conditional2_literal_list_init: compile-time error
-  var m12 = {4: true ? 499 : x};   //# conditional2_literal_map_value_init: compile-time error
-  Map<dynamic, dynamic> m32 = {4: true ? 499 : x};  //# conditional2_literal_map_value_init2: compile-time error
-  null ?? (true ? 499 : x);  //# conditional2_null_equals2: compile-time error
-  return true ? 499 : x;   //# conditional2_return: compile-time error
-  while (true ? 499 : x) {};  //# conditional2while: compile-time error
-  do {} while (true ? 499 : x);  //# conditional2do_while: compile-time error
-  for (var v in true ? 499 : x) {}   //# conditional2for_in: compile-time error
-
-  (true ? x : 499);   //# conditional3_parens: ok
-  true ? x : 499;  //# conditional3_stmt: ok
-  true ? true ? x : 499 : true ? x : 499;  //# conditional3_conditional: ok
-  for (true ? x : 499; false; true ? x : 499) {}   //# conditional3_for: ok
-  use(true ? x : 499);   //# conditional3_argument: compile-time error
-  void y3 = true ? x : 499;   //# conditional3_void_init: compile-time error
-  dynamic z3 = true ? x : 499;  //# conditional3_dynamic_init: compile-time error
-  throw true ? x : 499;   //# conditional3_throw: compile-time error
-  [true ? x : 499];   //# conditional3_literal_list_init: compile-time error
-  var m13 = {4: true ? x : 499 };   //# conditional3_literal_map_value_init: compile-time error
-  Map<dynamic, dynamic> m33 = {4: true ? x : 499 };  //# conditional3_literal_map_value_init2: compile-time error
-  null ?? (true ? x : 499);  //# conditional3_null_equals2: compile-time error
-  return true ? x : 499;   //# conditional3_return: compile-time error
-  while (true ? x : 499) {};  //# conditional_while: compile-time error
-  do {} while (true ? x : 499);  //# conditional_do_while: compile-time error
-  for (var v in true ? x : 499) {}   //# conditional_for_in: compile-time error
-}
-
-dynamic testVoidConditionalDynamic() {
-  void x;
-  return true ? x : x;   //# conditional_return_dynamic: ok
-  return true ? 499 : x;   //# conditional2_return_dynamic: ok
-  return true ? x : 499;   //# conditional3_return_dynamic: ok
-}
-
-class A<T> {
-  T x;
-
-  void foo() {}
-}
-
-class B implements A<void> {
-  void x;
-
-  int foo() => 499;
-
-  void forInTest() {
-    for (x in <void>[]) {}  //# instance2_for_in2: ok
-    for (x in [1, 2]) {}  //# instance2_for_in3: ok
-  }
-}
-
-class C implements A<void> {
-  void get x => null;
-  set x(void y) {}
-
-  void foo() {}
-
-  void forInTest() {
-    for (x in <void>[]) {}  //# instance3_for_in2: ok
-    for (x in [1, 2]) {}  //# instance3_for_in3: ok
-  }
-}
-
-Object testInstanceField() {
-  A<void> a = new A<void>();
-  a.x = 499;  //# field_assign: ok
-  a.x;  //# instance_stmt: ok
-  true ? a.x : a.x;  //# instance_conditional: ok
-  for (a.x; false; a.x) {}   //# instance_for: ok
-  use(a.x);   //# instance_argument: compile-time error
-  use(a.x as Object);  //# instance_as: ok
-  void y = a.x;   //# instance_void_init: compile-time error
-  dynamic z = a.x;  //# instance_dynamic_init: compile-time error
-  a.x is Object;   //# instance_is: compile-time error
-  throw a.x;   //# instance_throw: compile-time error
-  [a.x];   //# instance_literal_list_init: compile-time error
-  var m1 = {4: a.x};   //# instance_literal_map_value_init: compile-time error
-  var m2 = { a.x : 4};   //# instance_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: a.x};  //# instance_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = { a.x : 4};  //# instance_literal_map_key_init2: compile-time error
-  null ?? a.x;  //# instance_null_equals2: compile-time error
-  a.x ?? 499;  //# instance_null_equals2: compile-time error
-  return a.x;   //# instance_return: compile-time error
-  while (a.x) {};  //# instance_while: compile-time error
-  do {} while (a.x);  //# instance_do_while: compile-time error
-  for (var v in a.x) {}   //# instance_for_in: compile-time error
-  a.x += 1;  //# instance_plus_eq: compile-time error
-  a.x.toString();  //# instance_toString: compile-time error
-  a.x?.toString();  //# instance_null_dot: compile-time error
-  a.x..toString();  //# instance_cascade: compile-time error
-
-  B b = new B();
-  b.x = 42;   //# field_assign2: ok
-  b.x;  //# instance2_stmt: ok
-  true ? b.x : b.x;  //# instance2_conditional: ok
-  for (b.x; false; b.x) {}   //# instance2_for: ok
-  use(b.x);   //# instance2_argument: compile-time error
-  use(b.x as Object);  //# instance2_as: ok
-  void y2 = b.x;   //# instance2_void_init: compile-time error
-  dynamic z2 = b.x;  //# instance2_dynamic_init: compile-time error
-  b.x is Object;   //# instance2_is: compile-time error
-  throw b.x;   //# instance2_throw: compile-time error
-  [b.x];   //# instance2_literal_list_init: compile-time error
-  var m12 = {4: b.x};   //# instance2_literal_map_value_init: compile-time error
-  var m22 = { b.x : 4};   //# instance2_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m32 = {4: b.x};  //# instance2_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m42 = { b.x : 4};  //# instance2_literal_map_key_init2: compile-time error
-  null ?? b.x;  //# instance2_null_equals2: compile-time error
-  b.x ?? 499;  //# instance2_null_equals2: compile-time error
-  return b.x;   //# instance2_return: compile-time error
-  while (b.x) {};  //# instance2_while: compile-time error
-  do {} while (b.x);  //# instance2_do_while: compile-time error
-  for (var v in b.x) {}   //# instance2_for_in: compile-time error
-  b.forInTest();
-  b.x += 1;  //# instance2_plus_eq: compile-time error
-  b.x.toString();  //# instance2_toString: compile-time error
-  b.x?.toString();  //# instance2_null_dot: compile-time error
-  b.x..toString();  //# instance2_cascade: compile-time error
-
-  C c = new C();
-  c.x = 32;   //# setter_assign: ok
-  c.x;  //# instance3_stmt: ok
-  true ? c.x : c.x;  //# instance3_conditional: ok
-  for (c.x; false; c.x) {}   //# instance3_for: ok
-  use(c.x);   //# instance3_argument: compile-time error
-  use(c.x as Object);  //# instance3_as: ok
-  void y3 = c.x;   //# instance3_void_init: compile-time error
-  dynamic z3 = c.x;  //# instance3_dynamic_init: compile-time error
-  c.x is Object;   //# instance3_is: compile-time error
-  throw c.x;   //# instance3_throw: compile-time error
-  [c.x];   //# instance3_literal_list_init: compile-time error
-  var m13 = {4: c.x};   //# instance3_literal_map_value_init: compile-time error
-  var m23 = { c.x : 4};   //# instance3_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m33 = {4: c.x};  //# instance3_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m43 = { c.x : 4};  //# instance3_literal_map_key_init2: compile-time error
-  null ?? c.x;  //# instance3_null_equals2: compile-time error
-  c.x ?? 499;  //# instance3_null_equals2: compile-time error
-  return c.x;   //# instance3_return: compile-time error
-  while (c.x) {};  //# instance3_while: compile-time error
-  do {} while (c.x);  //# instance3_do_while: compile-time error
-  for (var v in c.x) {}   //# instance3_for_in: compile-time error
-  c.forInTest();
-  c.x += 1;  //# instance3_plus_eq: compile-time error
-  c.x.toString();  //# instance3_toString: compile-time error
-  c.x?.toString();  //# instance3_null_dot: compile-time error
-  c.x..toString();  //# instance3_cascade: compile-time error
-}
-
-dynamic testInstanceFieldDynamic() {
-  A<void> a = new A<void>();
-  return a.x;   //# instance_return_dynamic: ok
-
-  B b = new B();
-  return b.x;   //# instance2_return_dynamic: ok
-
-  C c = new C();
-  return c.x;   //# instance3_return_dynamic: ok
-}
-
-Object testParenthesized() {
-  void x;
-  (x);  //# paren_stmt: ok
-  true ? (x) : (x);  //# paren_conditional: ok
-  for ((x); false; (x)) {}   //# paren_for: ok
-  use((x));   //# paren_argument: compile-time error
-  use((x) as Object);  //# paren_as: ok
-  void y = (x);   //# paren_void_init: compile-time error
-  dynamic z = (x);  //# paren_dynamic_init: compile-time error
-  (x) is Object;   //# paren_is: compile-time error
-  throw (x);   //# paren_throw: compile-time error
-  [(x)];   //# paren_literal_list_init: compile-time error
-  var m1 = {4: (x) };   //# paren_literal_map_value_init: compile-time error
-  var m2 = { (x): 4};   //# paren_literal_map_key_init: compile-time error
-  Map<dynamic, dynamic> m3 = {4: (x) };  //# paren_literal_map_value_init2: compile-time error
-  Map<dynamic, dynamic> m4 = { (x): 4};  //# paren_literal_map_key_init2: compile-time error
-  (x) ?? 499;  //# paren_null_equals2: compile-time error
-  null ?? (x);  //# paren_null_equals2: compile-time error
-  return (x);   //# paren_return: compile-time error
-  while ((x)) {};  //# paren_while: compile-time error
-  do {} while ((x));  //# paren_do_while: compile-time error
-  for (var v in (x)) {}   //# paren_for_in: compile-time error
-  (x).toString();  //# paren_toString: compile-time error
-  (x)?.toString();  //# paren_null_dot: compile-time error
-  (x)..toString();  //# paren_cascade: compile-time error
-}
-
-dynamic testParenthesizedDynamic() {
-  void x;
-  return (x);   //# paren_return_dynamic: ok
-}
-
-void testReturnToVoid(void x, void f()) {
-  void y;
-  final void z = null;
-  A<void> a = new A<void>();
-  B b = new B();
-  C c = new C();
-  return x;   //# param_return_to_void: ok
-  return f();   //# call_return_to_void: ok
-  return y;   //# local_return_to_void: ok
-  return z;   //# final_local_return_to_void: ok
-  return global;   //# global_return_to_void: ok
-  return true ? x : x;   //# conditional_return_to_void: ok
-  return true ? 499 : x;   //# conditional2_return_to_void: ok
-  return true ? x : 499;   //# conditional3_return_to_void: ok
-  return a.x;   //# instance_return_to_void: ok
-  return b.x;   //# instance2_return_to_void: ok
-  return c.x;   //# instance3_return_to_void: ok
-  return (x);   //# paren_return_to_void: ok
-}
-
-main() {
-  try {
-    testVoidParam(499);
-    testVoidCall(() {});
-    testVoidLocal();
-    testVoidFinalLocal();
-    testVoidConditional();
-    testInstanceField();
-    testParenthesized();
-    testReturnToVoid(499, () {});
-  } catch (e) {
-    // Silently eat all dynamic errors.
-    // This test is only testing static analysis.
-  }
-}