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.
- }
-}