Version 2.13.0-100.0.dev
Merge commit 'dd1c3a3233be91a53eb4b5c6e05f878f6610816c' into 'dev'
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart
index f5b5a24..1d6d599 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart
@@ -1,8 +1,12 @@
// Copyright (c) 2020, 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.md file.
+
// @dart=2.9
+
foo() async {
Bar x;
for (dynamic y in x.z) {}
-}
\ No newline at end of file
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect
index 8c23a08..675b31e 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect
@@ -1,2 +1,3 @@
// @dart = 2.9
foo() async {}
+main() {}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect
index 8c23a08..675b31e 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect
@@ -1,2 +1,3 @@
// @dart = 2.9
foo() async {}
+main() {}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
index 1309bf1..92b2ed2 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:6:3: Error: 'Bar' isn't a type.
+// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:8:3: Error: 'Bar' isn't a type.
// Bar x;
// ^^^
//
@@ -13,3 +13,4 @@
for (dynamic y in x.z) {
}
}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect
index 4a9b82e..b695053 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect
@@ -3,3 +3,5 @@
static method foo() → dynamic async
;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
new file mode 100644
index 0000000..c6b4aa6
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:8:3: Error: 'Bar' isn't a type.
+// Bar x;
+// ^^^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static method foo() → dynamic /* originally async */ {
+ final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+ core::bool* :is_sync = false;
+ FutureOr<dynamic>* :return_value;
+ (dynamic) →* dynamic :async_op_then;
+ (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
+ core::int* :await_jump_var = 0;
+ dynamic :await_ctx_var;
+ function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
+ try {
+ #L1:
+ {
+ invalid-type x;
+ {
+ core::Iterator<invalid-type>* :sync-for-iterator = x.z.{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic y = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+ }
+ asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+ return;
+ }
+ on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+ asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+ }
+ :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+ :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+ :async_op.call();
+ :is_sync = true;
+ return :async_future;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart b/pkg/front_end/testcases/general/invalid_cast.dart
index 1aff128..81d1797 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart
+++ b/pkg/front_end/testcases/general/invalid_cast.dart
@@ -1,7 +1,9 @@
// 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=2.9
+
class C {
C();
factory C.fact() => null;
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
index f5d1183..95af468 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
@@ -2,60 +2,60 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/invalid_cast.dart:20:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+// pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
// - 'List' is from 'dart:core'.
// - 'Object' is from 'dart:core'.
// Change the type of the list literal or the context in which it is used.
// List<int> a = <Object>[];
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:21:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
// - 'Map' is from 'dart:core'.
// - 'Object' is from 'dart:core'.
// Change the type of the map literal or the context in which it is used.
// Map<int, String> b = <Object, String>{};
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:22:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
// - 'Map' is from 'dart:core'.
// - 'Object' is from 'dart:core'.
// Change the type of the map literal or the context in which it is used.
// Map<int, String> c = <int, Object>{};
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:23:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the function expression or the context in which it is used.
// int Function(Object) d = (int i) => i;
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:26:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+// pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
// - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// Change the type of the object being constructed or the context in which it is used.
// D g = new C.nonFact();
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:27:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+// pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
// - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// Change the type of the object being constructed or the context in which it is used.
// D h = new C.nonFact2();
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:28:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the method or the context in which it is used.
// void Function(Object) i = C.staticFunction;
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:29:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the function or the context in which it is used.
// void Function(Object) j = topLevelFunction;
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:30:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the function or the context in which it is used.
// void Function(Object) k = localFunction;
@@ -99,54 +99,54 @@
static method topLevelFunction(core::int* i) → void {}
static method bad() → dynamic {
function localFunction(core::int* i) → void {}
- core::List<core::int*>* a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:20:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+ core::List<core::int*>* a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
- 'List' is from 'dart:core'.
- 'Object' is from 'dart:core'.
Change the type of the list literal or the context in which it is used.
List<int> a = <Object>[];
^" in <core::Object*>[];
- core::Map<core::int*, core::String*>* b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:21:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+ core::Map<core::int*, core::String*>* b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
- 'Map' is from 'dart:core'.
- 'Object' is from 'dart:core'.
Change the type of the map literal or the context in which it is used.
Map<int, String> b = <Object, String>{};
^" in <core::Object*, core::String*>{};
- core::Map<core::int*, core::String*>* c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+ core::Map<core::int*, core::String*>* c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
- 'Map' is from 'dart:core'.
- 'Object' is from 'dart:core'.
Change the type of the map literal or the context in which it is used.
Map<int, String> c = <int, Object>{};
^" in <core::int*, core::Object*>{};
- (core::Object*) →* core::int* d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+ (core::Object*) →* core::int* d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the function expression or the context in which it is used.
int Function(Object) d = (int i) => i;
^" in (core::int* i) → core::int* => i;
self::D* e = self::C::fact() as{TypeError} self::D*;
self::D* f = new self::D::•() as{TypeError} self::D*;
- self::D* g = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:26:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+ self::D* g = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
- 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
- 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
Change the type of the object being constructed or the context in which it is used.
D g = new C.nonFact();
^" in new self::C::nonFact();
- self::D* h = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:27:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+ self::D* h = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
- 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
- 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
Change the type of the object being constructed or the context in which it is used.
D h = new C.nonFact2();
^" in new self::C::nonFact2();
- (core::Object*) →* void i = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ (core::Object*) →* void i = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the method or the context in which it is used.
void Function(Object) i = C.staticFunction;
^" in #C1;
- (core::Object*) →* void j = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ (core::Object*) →* void j = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the function or the context in which it is used.
void Function(Object) j = topLevelFunction;
^" in #C2;
- (core::Object*) →* void k = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ (core::Object*) →* void k = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the function or the context in which it is used.
void Function(Object) k = localFunction;
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
index ba11f4f..7cd74f4 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
@@ -2,60 +2,60 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/invalid_cast.dart:20:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+// pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
// - 'List' is from 'dart:core'.
// - 'Object' is from 'dart:core'.
// Change the type of the list literal or the context in which it is used.
// List<int> a = <Object>[];
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:21:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
// - 'Map' is from 'dart:core'.
// - 'Object' is from 'dart:core'.
// Change the type of the map literal or the context in which it is used.
// Map<int, String> b = <Object, String>{};
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:22:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
// - 'Map' is from 'dart:core'.
// - 'Object' is from 'dart:core'.
// Change the type of the map literal or the context in which it is used.
// Map<int, String> c = <int, Object>{};
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:23:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the function expression or the context in which it is used.
// int Function(Object) d = (int i) => i;
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:26:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+// pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
// - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// Change the type of the object being constructed or the context in which it is used.
// D g = new C.nonFact();
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:27:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+// pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
// - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
// Change the type of the object being constructed or the context in which it is used.
// D h = new C.nonFact2();
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:28:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the method or the context in which it is used.
// void Function(Object) i = C.staticFunction;
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:29:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the function or the context in which it is used.
// void Function(Object) j = topLevelFunction;
// ^
//
-// pkg/front_end/testcases/general/invalid_cast.dart:30:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+// pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
// - 'Object' is from 'dart:core'.
// Change the type of the function or the context in which it is used.
// void Function(Object) k = localFunction;
@@ -99,54 +99,54 @@
static method topLevelFunction(core::int* i) → void {}
static method bad() → dynamic {
function localFunction(core::int* i) → void {}
- core::List<core::int*>* a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:20:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+ core::List<core::int*>* a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
- 'List' is from 'dart:core'.
- 'Object' is from 'dart:core'.
Change the type of the list literal or the context in which it is used.
List<int> a = <Object>[];
^" in core::_GrowableList::•<core::Object*>(0);
- core::Map<core::int*, core::String*>* b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:21:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+ core::Map<core::int*, core::String*>* b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
- 'Map' is from 'dart:core'.
- 'Object' is from 'dart:core'.
Change the type of the map literal or the context in which it is used.
Map<int, String> b = <Object, String>{};
^" in <core::Object*, core::String*>{};
- core::Map<core::int*, core::String*>* c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+ core::Map<core::int*, core::String*>* c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
- 'Map' is from 'dart:core'.
- 'Object' is from 'dart:core'.
Change the type of the map literal or the context in which it is used.
Map<int, String> c = <int, Object>{};
^" in <core::int*, core::Object*>{};
- (core::Object*) →* core::int* d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+ (core::Object*) →* core::int* d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the function expression or the context in which it is used.
int Function(Object) d = (int i) => i;
^" in (core::int* i) → core::int* => i;
self::D* e = self::C::fact() as{TypeError} self::D*;
self::D* f = new self::D::•();
- self::D* g = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:26:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+ self::D* g = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
- 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
- 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
Change the type of the object being constructed or the context in which it is used.
D g = new C.nonFact();
^" in new self::C::nonFact();
- self::D* h = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:27:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+ self::D* h = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
- 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
- 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
Change the type of the object being constructed or the context in which it is used.
D h = new C.nonFact2();
^" in new self::C::nonFact2();
- (core::Object*) →* void i = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ (core::Object*) →* void i = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the method or the context in which it is used.
void Function(Object) i = C.staticFunction;
^" in #C1;
- (core::Object*) →* void j = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ (core::Object*) →* void j = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the function or the context in which it is used.
void Function(Object) j = topLevelFunction;
^" in #C2;
- (core::Object*) →* void k = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ (core::Object*) →* void k = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
- 'Object' is from 'dart:core'.
Change the type of the function or the context in which it is used.
void Function(Object) k = localFunction;
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart
new file mode 100644
index 0000000..d982b0cc
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart
@@ -0,0 +1,22 @@
+// 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=2.9
+
+Iterable takesNoArg() => null;
+void returnVoid() {}
+int returnInt() => 42;
+dynamic returnDynamic() => [];
+Object returnObject() => 0;
+
+test() {
+ for (var v in takesNoArg(0)) {}
+ for (var v in returnVoid()) {}
+ for (var v in returnInt()) {}
+ for (var v in returnDynamic()) {}
+ for (var v in returnObject()) {}
+ for (var v in throw '') {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.textual_outline.expect
new file mode 100644
index 0000000..271c64c
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+// @dart = 2.9
+Iterable takesNoArg() => null;
+void returnVoid() {}
+int returnInt() => 42;
+dynamic returnDynamic() => [];
+Object returnObject() => 0;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a23b740
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+// @dart = 2.9
+Iterable takesNoArg() => null;
+Object returnObject() => 0;
+dynamic returnDynamic() => [];
+int returnInt() => 42;
+main() {}
+test() {}
+void returnVoid() {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect
new file mode 100644
index 0000000..b53be81
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect
@@ -0,0 +1,56 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// for (var v in takesNoArg(0)) {}
+// ^
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:7:10: Context: Found this candidate, but the arguments don't match.
+// Iterable takesNoArg() => null;
+// ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+// for (var v in returnVoid()) {}
+// ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// - 'Iterable' is from 'dart:core'.
+// for (var v in returnInt()) {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>*
+ return null;
+static method returnVoid() → void {}
+static method returnInt() → core::int*
+ return 42;
+static method returnDynamic() → dynamic
+ return <dynamic>[];
+static method returnObject() → core::Object*
+ return 0;
+static method test() → dynamic {
+ for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+ for (var v in takesNoArg(0)) {}
+ ^" as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+ }
+ for (dynamic v in let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+ for (var v in returnVoid()) {}
+ ^" in self::returnVoid()) {
+ }
+ for (dynamic v in let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+ for (var v in returnInt()) {}
+ ^" in self::returnInt() as{TypeError} core::Iterable<dynamic>*) {
+ }
+ for (dynamic v in self::returnDynamic() as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+ }
+ for (dynamic v in self::returnObject() as{TypeError} core::Iterable<dynamic>*) {
+ }
+ for (dynamic v in throw "") {
+ }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.outline.expect
new file mode 100644
index 0000000..8b7863d
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>*
+ ;
+static method returnVoid() → void
+ ;
+static method returnInt() → core::int*
+ ;
+static method returnDynamic() → dynamic
+ ;
+static method returnObject() → core::Object*
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect
new file mode 100644
index 0000000..927eae0
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect
@@ -0,0 +1,86 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// for (var v in takesNoArg(0)) {}
+// ^
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:7:10: Context: Found this candidate, but the arguments don't match.
+// Iterable takesNoArg() => null;
+// ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+// for (var v in returnVoid()) {}
+// ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// - 'Iterable' is from 'dart:core'.
+// for (var v in returnInt()) {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>*
+ return null;
+static method returnVoid() → void {}
+static method returnInt() → core::int*
+ return 42;
+static method returnDynamic() → dynamic
+ return core::_GrowableList::•<dynamic>(0);
+static method returnObject() → core::Object*
+ return 0;
+static method test() → dynamic {
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+ for (var v in takesNoArg(0)) {}
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic v = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+ {
+ core::Iterator<invalid-type>* :sync-for-iterator = (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+ for (var v in returnVoid()) {}
+ ^" in self::returnVoid()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic v = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+ for (var v in returnInt()) {}
+ ^" in self::returnInt() as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic v = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = (self::returnDynamic() as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic v = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = (self::returnObject() as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic v = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+ {
+ core::Iterator<Never*>* :sync-for-iterator = (throw "").{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic v = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
+ }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue39817.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue39817.dart.weak.transformed.expect
index cad4f51..5dfdb2c 100644
--- a/pkg/front_end/testcases/general/issue39817.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39817.dart.weak.transformed.expect
@@ -1,9 +1,15 @@
library;
import self as self;
+import "dart:core" as core;
static method foo() → dynamic {
Null _null;
- for (dynamic i in _null) {
+ {
+ core::Iterator<invalid-type>* :sync-for-iterator = _null.{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
;
}
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect
index e3ffc57..3162d81 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect
@@ -171,27 +171,45 @@
static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
return <core::Object>[ block {
final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...a}, // Error.
- ^") {
- final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
- #t1.{core::Set::add}{Invariant}(#t3);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+ #t1.{core::Set::add}{Invariant}(#t3);
+ }
+ }
}
} =>#t1, block {
final core::Set<core::int> #t4 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...b}, // Error.
- ^") {
- final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
- #t4.{core::Set::add}{Invariant}(#t6);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
+ #t4.{core::Set::add}{Invariant}(#t6);
+ }
+ }
}
} =>#t4, block {
final core::Set<core::int> #t7 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...c}, // Error.
- ^") {
- final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
- #t7.{core::Set::add}{Invariant}(#t9);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
+ #t7.{core::Set::add}{Invariant}(#t9);
+ }
+ }
}
} =>#t7, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...d}, // Error.
@@ -206,31 +224,46 @@
^");
} =>#t10, block {
final core::Set<core::int> #t11 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...a}, // Error.
- ^") {
- final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
- #t11.{core::Set::add}{Invariant}(#t13);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
+ #t11.{core::Set::add}{Invariant}(#t13);
+ }
}
+ }
} =>#t11, block {
final core::Set<core::int> #t14 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...b}, // Error.
- ^") {
- final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
- #t14.{core::Set::add}{Invariant}(#t16);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
+ #t14.{core::Set::add}{Invariant}(#t16);
+ }
}
+ }
} =>#t14, block {
final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...c}, // Error.
- ^") {
- final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
- #t17.{core::Set::add}{Invariant}(#t19);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
+ #t17.{core::Set::add}{Invariant}(#t19);
+ }
}
+ }
} =>#t17, block {
final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
if(condition)
@@ -243,11 +276,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...a}, // Error.
- ^") {
- final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
- #t21.{core::Set::add}{Invariant}(#t23);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t22 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
+ #t21.{core::Set::add}{Invariant}(#t23);
+ }
+ }
}
}
}
@@ -257,11 +296,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...b}, // Error.
- ^") {
- final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
- #t24.{core::Set::add}{Invariant}(#t26);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t25 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
+ #t24.{core::Set::add}{Invariant}(#t26);
+ }
+ }
}
}
}
@@ -271,11 +316,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...c}, // Error.
- ^") {
- final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
- #t27.{core::Set::add}{Invariant}(#t29);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t28 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
+ #t27.{core::Set::add}{Invariant}(#t29);
+ }
+ }
}
}
}
@@ -292,31 +343,46 @@
}
} =>#t30, block {
final core::Set<core::int> #t31 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...a}, // Error.
- ^") {
- final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
- #t31.{core::Set::add}{Invariant}(#t33);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t32 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
+ #t31.{core::Set::add}{Invariant}(#t33);
+ }
}
+ }
} =>#t31, block {
final core::Set<core::int> #t34 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...b}, // Error.
- ^") {
- final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
- #t34.{core::Set::add}{Invariant}(#t36);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
+ #t34.{core::Set::add}{Invariant}(#t36);
+ }
}
+ }
} =>#t34, block {
final core::Set<core::int> #t37 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...c}, // Error.
- ^") {
- final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
- #t37.{core::Set::add}{Invariant}(#t39);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t38 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
+ #t37.{core::Set::add}{Invariant}(#t39);
+ }
}
+ }
} =>#t37, block {
final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
@@ -572,27 +638,45 @@
static method bar<X extends core::List<core::int>? = core::List<core::int>?, Y extends core::Set<core::int>? = core::Set<core::int>?, Z extends core::Iterable<core::int>? = core::Iterable<core::int>?, W extends core::Map<core::int, core::int>? = core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
return <core::Object>[ block {
final core::Set<core::int> #t101 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...x}, // Error.
- ^") {
- final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
- #t101.{core::Set::add}{Invariant}(#t103);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t102 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
+ #t101.{core::Set::add}{Invariant}(#t103);
+ }
+ }
}
} =>#t101, block {
final core::Set<core::int> #t104 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...y}, // Error.
- ^") {
- final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
- #t104.{core::Set::add}{Invariant}(#t106);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t105 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
+ #t104.{core::Set::add}{Invariant}(#t106);
+ }
+ }
}
} =>#t104, block {
final core::Set<core::int> #t107 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...z}, // Error.
- ^") {
- final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
- #t107.{core::Set::add}{Invariant}(#t109);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t108 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
+ #t107.{core::Set::add}{Invariant}(#t109);
+ }
+ }
}
} =>#t107, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...w}, // Error.
@@ -605,31 +689,46 @@
^");
} =>#t110, block {
final core::Set<core::int> #t111 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...x}, // Error.
- ^") {
- final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
- #t111.{core::Set::add}{Invariant}(#t113);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
+ #t111.{core::Set::add}{Invariant}(#t113);
+ }
}
+ }
} =>#t111, block {
final core::Set<core::int> #t114 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...y}, // Error.
- ^") {
- final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
- #t114.{core::Set::add}{Invariant}(#t116);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
+ #t114.{core::Set::add}{Invariant}(#t116);
+ }
}
+ }
} =>#t114, block {
final core::Set<core::int> #t117 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...z}, // Error.
- ^") {
- final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
- #t117.{core::Set::add}{Invariant}(#t119);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t118 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
+ #t117.{core::Set::add}{Invariant}(#t119);
+ }
}
+ }
} =>#t117, block {
final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
if(condition)
@@ -642,11 +741,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...x}, // Error.
- ^") {
- final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
- #t121.{core::Set::add}{Invariant}(#t123);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t122 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
+ #t121.{core::Set::add}{Invariant}(#t123);
+ }
+ }
}
}
}
@@ -656,11 +761,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...y}, // Error.
- ^") {
- final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
- #t124.{core::Set::add}{Invariant}(#t126);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t125 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
+ #t124.{core::Set::add}{Invariant}(#t126);
+ }
+ }
}
}
}
@@ -670,11 +781,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...z}, // Error.
- ^") {
- final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
- #t127.{core::Set::add}{Invariant}(#t129);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
+ #t127.{core::Set::add}{Invariant}(#t129);
+ }
+ }
}
}
}
@@ -691,31 +808,46 @@
}
} =>#t130, block {
final core::Set<core::int> #t131 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...x}, // Error.
- ^") {
- final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
- #t131.{core::Set::add}{Invariant}(#t133);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t132 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
+ #t131.{core::Set::add}{Invariant}(#t133);
+ }
}
+ }
} =>#t131, block {
final core::Set<core::int> #t134 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...y}, // Error.
- ^") {
- final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
- #t134.{core::Set::add}{Invariant}(#t136);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t135 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
+ #t134.{core::Set::add}{Invariant}(#t136);
+ }
}
+ }
} =>#t134, block {
final core::Set<core::int> #t137 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...z}, // Error.
- ^") {
- final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
- #t137.{core::Set::add}{Invariant}(#t139);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t138 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
+ #t137.{core::Set::add}{Invariant}(#t139);
+ }
}
+ }
} =>#t137, block {
final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect
index e3ffc57..3162d81 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect
@@ -171,27 +171,45 @@
static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
return <core::Object>[ block {
final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...a}, // Error.
- ^") {
- final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
- #t1.{core::Set::add}{Invariant}(#t3);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+ #t1.{core::Set::add}{Invariant}(#t3);
+ }
+ }
}
} =>#t1, block {
final core::Set<core::int> #t4 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...b}, // Error.
- ^") {
- final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
- #t4.{core::Set::add}{Invariant}(#t6);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
+ #t4.{core::Set::add}{Invariant}(#t6);
+ }
+ }
}
} =>#t4, block {
final core::Set<core::int> #t7 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...c}, // Error.
- ^") {
- final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
- #t7.{core::Set::add}{Invariant}(#t9);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
+ #t7.{core::Set::add}{Invariant}(#t9);
+ }
+ }
}
} =>#t7, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...d}, // Error.
@@ -206,31 +224,46 @@
^");
} =>#t10, block {
final core::Set<core::int> #t11 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...a}, // Error.
- ^") {
- final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
- #t11.{core::Set::add}{Invariant}(#t13);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
+ #t11.{core::Set::add}{Invariant}(#t13);
+ }
}
+ }
} =>#t11, block {
final core::Set<core::int> #t14 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...b}, // Error.
- ^") {
- final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
- #t14.{core::Set::add}{Invariant}(#t16);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
+ #t14.{core::Set::add}{Invariant}(#t16);
+ }
}
+ }
} =>#t14, block {
final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...c}, // Error.
- ^") {
- final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
- #t17.{core::Set::add}{Invariant}(#t19);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
+ #t17.{core::Set::add}{Invariant}(#t19);
+ }
}
+ }
} =>#t17, block {
final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
if(condition)
@@ -243,11 +276,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...a}, // Error.
- ^") {
- final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
- #t21.{core::Set::add}{Invariant}(#t23);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t22 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
+ #t21.{core::Set::add}{Invariant}(#t23);
+ }
+ }
}
}
}
@@ -257,11 +296,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...b}, // Error.
- ^") {
- final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
- #t24.{core::Set::add}{Invariant}(#t26);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t25 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
+ #t24.{core::Set::add}{Invariant}(#t26);
+ }
+ }
}
}
}
@@ -271,11 +316,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...c}, // Error.
- ^") {
- final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
- #t27.{core::Set::add}{Invariant}(#t29);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t28 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
+ #t27.{core::Set::add}{Invariant}(#t29);
+ }
+ }
}
}
}
@@ -292,31 +343,46 @@
}
} =>#t30, block {
final core::Set<core::int> #t31 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...a}, // Error.
- ^") {
- final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
- #t31.{core::Set::add}{Invariant}(#t33);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t32 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
+ #t31.{core::Set::add}{Invariant}(#t33);
+ }
}
+ }
} =>#t31, block {
final core::Set<core::int> #t34 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...b}, // Error.
- ^") {
- final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
- #t34.{core::Set::add}{Invariant}(#t36);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
+ #t34.{core::Set::add}{Invariant}(#t36);
+ }
}
+ }
} =>#t34, block {
final core::Set<core::int> #t37 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...c}, // Error.
- ^") {
- final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
- #t37.{core::Set::add}{Invariant}(#t39);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t38 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
+ #t37.{core::Set::add}{Invariant}(#t39);
+ }
}
+ }
} =>#t37, block {
final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
@@ -572,27 +638,45 @@
static method bar<X extends core::List<core::int>? = core::List<core::int>?, Y extends core::Set<core::int>? = core::Set<core::int>?, Z extends core::Iterable<core::int>? = core::Iterable<core::int>?, W extends core::Map<core::int, core::int>? = core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
return <core::Object>[ block {
final core::Set<core::int> #t101 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...x}, // Error.
- ^") {
- final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
- #t101.{core::Set::add}{Invariant}(#t103);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t102 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
+ #t101.{core::Set::add}{Invariant}(#t103);
+ }
+ }
}
} =>#t101, block {
final core::Set<core::int> #t104 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...y}, // Error.
- ^") {
- final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
- #t104.{core::Set::add}{Invariant}(#t106);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t105 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
+ #t104.{core::Set::add}{Invariant}(#t106);
+ }
+ }
}
} =>#t104, block {
final core::Set<core::int> #t107 = new col::_CompactLinkedHashSet::•<core::int>();
- for (final dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...z}, // Error.
- ^") {
- final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
- #t107.{core::Set::add}{Invariant}(#t109);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t108 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
+ #t107.{core::Set::add}{Invariant}(#t109);
+ }
+ }
}
} =>#t107, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{...w}, // Error.
@@ -605,31 +689,46 @@
^");
} =>#t110, block {
final core::Set<core::int> #t111 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...x}, // Error.
- ^") {
- final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
- #t111.{core::Set::add}{Invariant}(#t113);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
+ #t111.{core::Set::add}{Invariant}(#t113);
+ }
}
+ }
} =>#t111, block {
final core::Set<core::int> #t114 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...y}, // Error.
- ^") {
- final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
- #t114.{core::Set::add}{Invariant}(#t116);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
+ #t114.{core::Set::add}{Invariant}(#t116);
+ }
}
+ }
} =>#t114, block {
final core::Set<core::int> #t117 = new col::_CompactLinkedHashSet::•<core::int>();
- if(condition)
- for (final dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ if(condition) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{if (condition) ...z}, // Error.
- ^") {
- final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
- #t117.{core::Set::add}{Invariant}(#t119);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t118 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
+ #t117.{core::Set::add}{Invariant}(#t119);
+ }
}
+ }
} =>#t117, block {
final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
if(condition)
@@ -642,11 +741,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...x}, // Error.
- ^") {
- final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
- #t121.{core::Set::add}{Invariant}(#t123);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t122 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
+ #t121.{core::Set::add}{Invariant}(#t123);
+ }
+ }
}
}
}
@@ -656,11 +761,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...y}, // Error.
- ^") {
- final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
- #t124.{core::Set::add}{Invariant}(#t126);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t125 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
+ #t124.{core::Set::add}{Invariant}(#t126);
+ }
+ }
}
}
}
@@ -670,11 +781,17 @@
core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
dynamic e = :sync-for-iterator.{core::Iterator::current};
- for (final dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (dynamic e in iterable) ...z}, // Error.
- ^") {
- final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
- #t127.{core::Set::add}{Invariant}(#t129);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
+ #t127.{core::Set::add}{Invariant}(#t129);
+ }
+ }
}
}
}
@@ -691,31 +808,46 @@
}
} =>#t130, block {
final core::Set<core::int> #t131 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...x}, // Error.
- ^") {
- final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
- #t131.{core::Set::add}{Invariant}(#t133);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t132 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
+ #t131.{core::Set::add}{Invariant}(#t133);
+ }
}
+ }
} =>#t131, block {
final core::Set<core::int> #t134 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...y}, // Error.
- ^") {
- final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
- #t134.{core::Set::add}{Invariant}(#t136);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t135 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
+ #t134.{core::Set::add}{Invariant}(#t136);
+ }
}
+ }
} =>#t134, block {
final core::Set<core::int> #t137 = new col::_CompactLinkedHashSet::•<core::int>();
- for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
- for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+ for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+ core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
{for (int i = 0; i < 42; ++i) ...z}, // Error.
- ^") {
- final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
- #t137.{core::Set::add}{Invariant}(#t139);
+ ^".{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t138 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
+ #t137.{core::Set::add}{Invariant}(#t139);
+ }
}
+ }
} =>#t137, block {
final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index bd4dc72..91180e9 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -18,7 +18,6 @@
general/abstract_members: TypeCheckError
general/accessors: RuntimeError
general/ambiguous_exports: RuntimeError
-general/async_method_with_invalid_type: Crash
general/await_in_non_async: RuntimeError
general/bug21938: TypeCheckError
general/bug30695: TypeCheckError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 1087328..95656fe 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -21,7 +21,6 @@
general/abstract_members: TypeCheckError
general/accessors: RuntimeError
general/ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
-general/async_method_with_invalid_type: Crash
general/await_in_non_async: RuntimeError # Expected.
general/bug21938: TypeCheckError
general/bug30695: TypeCheckError
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 5690ddb..7e38523 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -9119,15 +9119,26 @@
TypeParameterType typeParameterType = iterableType;
iterableType = typeParameterType.bound;
}
+ if (iterableType is NeverType) {
+ return iterableType;
+ }
+ if (iterableType is InvalidType) {
+ return iterableType;
+ }
+ if (iterableType is! InterfaceType) {
+ // TODO(johnniwinther): Change this to an assert once the CFE correctly
+ // inserts casts for all invalid iterable types.
+ return const InvalidType();
+ }
if (isAsync) {
List<DartType> typeArguments = context.typeEnvironment
- .getTypeArgumentsAsInstanceOf(iterableType as InterfaceType,
- context.typeEnvironment.coreTypes.streamClass)!;
+ .getTypeArgumentsAsInstanceOf(
+ iterableType, context.typeEnvironment.coreTypes.streamClass)!;
return typeArguments.single;
} else {
List<DartType> typeArguments = context.typeEnvironment
- .getTypeArgumentsAsInstanceOf(iterableType as InterfaceType,
- context.typeEnvironment.coreTypes.iterableClass)!;
+ .getTypeArgumentsAsInstanceOf(
+ iterableType, context.typeEnvironment.coreTypes.iterableClass)!;
return typeArguments.single;
}
}
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index 24ed26c..5b8e4b0 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -175,29 +175,18 @@
// }
final CoreTypes coreTypes = staticTypeContext.typeEnvironment.coreTypes;
- DartType iterableType = stmt.iterable.getStaticType(staticTypeContext);
- while (iterableType is TypeParameterType) {
- TypeParameterType typeParameterType = iterableType;
- iterableType =
- typeParameterType.promotedBound ?? typeParameterType.parameter.bound;
- }
-
// The CFE might invoke this transformation despite the program having
// compile-time errors. So we will not transform this [stmt] if the
- // `stmt.iterable` is not a subtype of non-nullable/legacy Iterable.
- if (iterableType is! InterfaceType ||
- !staticTypeContext.typeEnvironment.isSubtypeOf(
- iterableType,
- coreTypes.iterableRawType(staticTypeContext.nonNullable),
- staticTypeContext.isNonNullableByDefault
- ? SubtypeCheckMode.withNullabilities
- : SubtypeCheckMode.ignoringNullabilities)) {
- return super.visitForInStatement(stmt);
+ // `stmt.iterable` is an invalid expression or has an invalid type and
+ // instead eliminate the entire for-in and replace it with a invalid
+ // expression statement.
+ final iterable = stmt.iterable;
+ final iterableType = iterable.getStaticType(staticTypeContext);
+ if (iterableType is InvalidType) {
+ return ExpressionStatement(
+ InvalidExpression('Invalid iterable type in for-in'));
}
- final DartType iterationType = staticTypeContext.typeEnvironment
- .forInElementType(stmt, (iterableType as InterfaceType));
-
// The NNBD sdk declares that Iterable.get:iterator returns a non-nullable
// `Iterator<E>`.
assert(const [
@@ -205,20 +194,21 @@
Nullability.legacy
].contains(coreTypes.iterableGetIterator.function.returnType.nullability));
- final iteratorType = InterfaceType(coreTypes.iteratorClass,
- staticTypeContext.nonNullable, [iterationType]);
+ final DartType elementType = stmt.getElementType(staticTypeContext);
+ final iteratorType = InterfaceType(
+ coreTypes.iteratorClass, staticTypeContext.nonNullable, [elementType]);
final syncForIterator = VariableDeclaration(
ContinuationVariables.syncForIterator,
initializer: PropertyGet(
- stmt.iterable, Name('iterator'), coreTypes.iterableGetIterator)
- ..fileOffset = stmt.iterable.fileOffset,
+ iterable, Name('iterator'), coreTypes.iterableGetIterator)
+ ..fileOffset = iterable.fileOffset,
type: iteratorType)
- ..fileOffset = stmt.iterable.fileOffset;
+ ..fileOffset = iterable.fileOffset;
final condition = MethodInvocation(VariableGet(syncForIterator),
Name('moveNext'), Arguments([]), coreTypes.iteratorMoveNext)
- ..fileOffset = stmt.iterable.fileOffset;
+ ..fileOffset = iterable.fileOffset;
final variable = stmt.variable
..initializer = (PropertyGet(VariableGet(syncForIterator),
diff --git a/runtime/tests/vm/dart/regress_45014_test.dart b/runtime/tests/vm/dart/regress_45014_test.dart
new file mode 100644
index 0000000..31ccddc
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_45014_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2011, 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.
+
+main() {
+ neverForInExpressionType(); //# 01: runtime error
+}
+
+neverForInExpressionType() async { //# 01: continued
+ return <int, String>{ //# 01: continued
+ for (var y in throw '') ...y, //# 01: continued
+ }; //# 01: continued
+} //# 01: continued
+
+invalidForInExpressionType(X x) async { //# 02: compile-time error
+ return <X, X>{ //# 02: continued
+ for (var y in x) ...y, //# 02: continued
+ }; //# 02: continued
+} //# 02: continued
+
diff --git a/runtime/tests/vm/dart_2/regress_45014_test.dart b/runtime/tests/vm/dart_2/regress_45014_test.dart
new file mode 100644
index 0000000..31ccddc
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_45014_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2011, 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.
+
+main() {
+ neverForInExpressionType(); //# 01: runtime error
+}
+
+neverForInExpressionType() async { //# 01: continued
+ return <int, String>{ //# 01: continued
+ for (var y in throw '') ...y, //# 01: continued
+ }; //# 01: continued
+} //# 01: continued
+
+invalidForInExpressionType(X x) async { //# 02: compile-time error
+ return <X, X>{ //# 02: continued
+ for (var y in x) ...y, //# 02: continued
+ }; //# 02: continued
+} //# 02: continued
+
diff --git a/tools/VERSION b/tools/VERSION
index 0ca9cdf..26d7750 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 99
+PRERELEASE 100
PRERELEASE_PATCH 0
\ No newline at end of file