Version 2.14.0-347.0.dev Merge commit '80b05d07e84468caadd2b9d63e4f2efecc9499f1' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart index 9e9b67d..01cf218 100644 --- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart +++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -217,6 +217,7 @@ @override ExpressionInferenceResult visitConstructorTearOff( ConstructorTearOff node, DartType typeContext) { + inferrer.ensureMemberType(node.target); DartType type = node.target.function!.computeFunctionType(inferrer.library.nonNullable); return inferrer.instantiateTearOff(type, typeContext, node);
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart index f157d7b..a0be20e 100644 --- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart +++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -363,6 +363,14 @@ } } + /// Ensures that the type of [member] has been computed. + // TODO(johnniwinther): Expand this to handle lowerings. + void ensureMemberType(Member member) { + if (member is Constructor) { + inferConstructorParameterTypes(member); + } + } + @override void inferConstructorParameterTypes(Constructor target) { ConstructorBuilder? constructor = engine.beingInferred[target];
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart new file mode 100644 index 0000000..1750b68 --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart
@@ -0,0 +1,76 @@ +// Copyright (c) 2021, 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. + +final bool inSoundMode = <int?>[] is! List<int>; + +main() { + print('inSoundMode: $inSoundMode'); + testInferred(); +} + +class Class1 { + int field; + + Class1(this.field); +} + +abstract class Interface2 { + int get field; +} + +class Class2 implements Interface2 { + final field; + + Class2(this.field); +} + +var Class1_new = Class1.new; +var Class2_new = Class2.new; + +testInferred() { + var f1a = Class1.new; + expect(true, f1a is Class1 Function(int)); + expect(false, f1a is Class1 Function(String)); + var c1a = f1a(0); + expect(true, c1a is Class1); + () { + f1a(''); // error + }; + + dynamic f1b = Class1.new; + var c1b = f1b(0); + expect(true, c1b is Class1); + throws(() => f1b('')); + + var f2a = Class2.new; + expect(true, f2a is Class2 Function(int)); + expect(false, f2a is Class2 Function(String)); + var c2a = f2a(0); + expect(true, c2a is Class2); + () { + f2a(''); // error + }; + + dynamic f2b = Class2.new; + var c2b = f2b(0); + expect(true, c2b is Class2); + throws(() => f2b('')); +} + +expect(expected, actual) { + if (expected != actual) throw 'Expected $expected, actual $actual'; +} + +throws(Function() f, {bool inSoundModeOnly: false}) { + try { + f(); + } catch (e) { + print('Thrown: $e'); + return; + } + if (!inSoundMode && inSoundModeOnly) { + return; + } + throw 'Expected exception'; +}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect new file mode 100644 index 0000000..e2692d7 --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect
@@ -0,0 +1,93 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f1a(''); // error +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f2a(''); // error +// ^ +// +import self as self; +import "dart:core" as core; + +class Class1 extends core::Object { + field core::int field; + constructor •(core::int field) → self::Class1 + : self::Class1::field = field, super core::Object::•() + ; +} +abstract class Interface2 extends core::Object { + synthetic constructor •() → self::Interface2 + : super core::Object::•() + ; + abstract get field() → core::int; +} +class Class2 extends core::Object implements self::Interface2 { + final field core::int field; + constructor •(core::int field) → self::Class2 + : self::Class2::field = field, super core::Object::•() + ; +} +static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>); +static field (core::int) → self::Class1 Class1_new = #C1; +static field (core::int) → self::Class2 Class2_new = #C2; +static method main() → dynamic { + core::print("inSoundMode: ${self::inSoundMode}"); + self::testInferred(); +} +static method testInferred() → dynamic { + (core::int) → self::Class1 f1a = #C1; + self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1); + self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1); + self::Class1 c1a = f1a(0){(core::int) → self::Class1}; + self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); + () → Null { + f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; + }; + dynamic f1b = #C1; + dynamic c1b = f1b{dynamic}.call(0); + self::expect(true, c1b is{ForNonNullableByDefault} self::Class1); + self::throws(() → dynamic => f1b{dynamic}.call("")); + (core::int) → self::Class2 f2a = #C2; + self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2); + self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2); + self::Class2 c2a = f2a(0){(core::int) → self::Class2}; + self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); + () → Null { + f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; + }; + dynamic f2b = #C2; + dynamic c2b = f2b{dynamic}.call(0); + self::expect(true, c2b is{ForNonNullableByDefault} self::Class2); + self::throws(() → dynamic => f2b{dynamic}.call("")); +} +static method expect(dynamic expected, dynamic actual) → dynamic { + if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) + throw "Expected ${expected}, actual ${actual}"; +} +static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C3}) → dynamic { + try { + f(){() → dynamic}; + } + on core::Object catch(final core::Object e) { + core::print("Thrown: ${e}"); + return; + } + if(!self::inSoundMode && inSoundModeOnly) { + return; + } + throw "Expected exception"; +} + +constants { + #C1 = constructor-tearoff self::Class1::• + #C2 = constructor-tearoff self::Class2::• + #C3 = false +}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect new file mode 100644 index 0000000..6a6db60 --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect
@@ -0,0 +1,93 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f1a(''); // error +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f2a(''); // error +// ^ +// +import self as self; +import "dart:core" as core; + +class Class1 extends core::Object { + field core::int field; + constructor •(core::int field) → self::Class1 + : self::Class1::field = field, super core::Object::•() + ; +} +abstract class Interface2 extends core::Object { + synthetic constructor •() → self::Interface2 + : super core::Object::•() + ; + abstract get field() → core::int; +} +class Class2 extends core::Object implements self::Interface2 { + final field core::int field; + constructor •(core::int field) → self::Class2 + : self::Class2::field = field, super core::Object::•() + ; +} +static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); +static field (core::int) → self::Class1 Class1_new = #C1; +static field (core::int) → self::Class2 Class2_new = #C2; +static method main() → dynamic { + core::print("inSoundMode: ${self::inSoundMode}"); + self::testInferred(); +} +static method testInferred() → dynamic { + (core::int) → self::Class1 f1a = #C1; + self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1); + self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1); + self::Class1 c1a = f1a(0){(core::int) → self::Class1}; + self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); + () → Null { + f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; + }; + dynamic f1b = #C1; + dynamic c1b = f1b{dynamic}.call(0); + self::expect(true, c1b is{ForNonNullableByDefault} self::Class1); + self::throws(() → dynamic => f1b{dynamic}.call("")); + (core::int) → self::Class2 f2a = #C2; + self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2); + self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2); + self::Class2 c2a = f2a(0){(core::int) → self::Class2}; + self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); + () → Null { + f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; + }; + dynamic f2b = #C2; + dynamic c2b = f2b{dynamic}.call(0); + self::expect(true, c2b is{ForNonNullableByDefault} self::Class2); + self::throws(() → dynamic => f2b{dynamic}.call("")); +} +static method expect(dynamic expected, dynamic actual) → dynamic { + if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) + throw "Expected ${expected}, actual ${actual}"; +} +static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C3}) → dynamic { + try { + f(){() → dynamic}; + } + on core::Object catch(final core::Object e) { + core::print("Thrown: ${e}"); + return; + } + if(!self::inSoundMode && inSoundModeOnly) { + return; + } + throw "Expected exception"; +} + +constants { + #C1 = constructor-tearoff self::Class1::• + #C2 = constructor-tearoff self::Class2::• + #C3 = false +}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect new file mode 100644 index 0000000..94115d1 --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect
@@ -0,0 +1,18 @@ +final bool inSoundMode = <int?>[] is! List<int>; +main() {} +class Class1 { + int field; + Class1(this.field); +} +abstract class Interface2 { + int get field; +} +class Class2 implements Interface2 { + final field; + Class2(this.field); +} +var Class1_new = Class1.new; +var Class2_new = Class2.new; +testInferred() {} +expect(expected, actual) {} +throws(Function() f, {bool inSoundModeOnly: false}) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect new file mode 100644 index 0000000..e2692d7 --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect
@@ -0,0 +1,93 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f1a(''); // error +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f2a(''); // error +// ^ +// +import self as self; +import "dart:core" as core; + +class Class1 extends core::Object { + field core::int field; + constructor •(core::int field) → self::Class1 + : self::Class1::field = field, super core::Object::•() + ; +} +abstract class Interface2 extends core::Object { + synthetic constructor •() → self::Interface2 + : super core::Object::•() + ; + abstract get field() → core::int; +} +class Class2 extends core::Object implements self::Interface2 { + final field core::int field; + constructor •(core::int field) → self::Class2 + : self::Class2::field = field, super core::Object::•() + ; +} +static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>); +static field (core::int) → self::Class1 Class1_new = #C1; +static field (core::int) → self::Class2 Class2_new = #C2; +static method main() → dynamic { + core::print("inSoundMode: ${self::inSoundMode}"); + self::testInferred(); +} +static method testInferred() → dynamic { + (core::int) → self::Class1 f1a = #C1; + self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1); + self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1); + self::Class1 c1a = f1a(0){(core::int) → self::Class1}; + self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); + () → Null { + f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; + }; + dynamic f1b = #C1; + dynamic c1b = f1b{dynamic}.call(0); + self::expect(true, c1b is{ForNonNullableByDefault} self::Class1); + self::throws(() → dynamic => f1b{dynamic}.call("")); + (core::int) → self::Class2 f2a = #C2; + self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2); + self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2); + self::Class2 c2a = f2a(0){(core::int) → self::Class2}; + self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); + () → Null { + f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; + }; + dynamic f2b = #C2; + dynamic c2b = f2b{dynamic}.call(0); + self::expect(true, c2b is{ForNonNullableByDefault} self::Class2); + self::throws(() → dynamic => f2b{dynamic}.call("")); +} +static method expect(dynamic expected, dynamic actual) → dynamic { + if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) + throw "Expected ${expected}, actual ${actual}"; +} +static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C3}) → dynamic { + try { + f(){() → dynamic}; + } + on core::Object catch(final core::Object e) { + core::print("Thrown: ${e}"); + return; + } + if(!self::inSoundMode && inSoundModeOnly) { + return; + } + throw "Expected exception"; +} + +constants { + #C1 = constructor-tearoff self::Class1::• + #C2 = constructor-tearoff self::Class2::• + #C3 = false +}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect new file mode 100644 index 0000000..73a2bca --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect
@@ -0,0 +1,30 @@ +library /*isNonNullableByDefault*/; +import self as self; +import "dart:core" as core; + +class Class1 extends core::Object { + field core::int field; + constructor •(core::int field) → self::Class1 + ; +} +abstract class Interface2 extends core::Object { + synthetic constructor •() → self::Interface2 + ; + abstract get field() → core::int; +} +class Class2 extends core::Object implements self::Interface2 { + final field core::int field; + constructor •(core::int field) → self::Class2 + ; +} +static final field core::bool inSoundMode; +static field (core::int) → self::Class1 Class1_new; +static field (core::int) → self::Class2 Class2_new; +static method main() → dynamic + ; +static method testInferred() → dynamic + ; +static method expect(dynamic expected, dynamic actual) → dynamic + ; +static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic + ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect new file mode 100644 index 0000000..6a6db60 --- /dev/null +++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect
@@ -0,0 +1,93 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f1a(''); // error +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// f2a(''); // error +// ^ +// +import self as self; +import "dart:core" as core; + +class Class1 extends core::Object { + field core::int field; + constructor •(core::int field) → self::Class1 + : self::Class1::field = field, super core::Object::•() + ; +} +abstract class Interface2 extends core::Object { + synthetic constructor •() → self::Interface2 + : super core::Object::•() + ; + abstract get field() → core::int; +} +class Class2 extends core::Object implements self::Interface2 { + final field core::int field; + constructor •(core::int field) → self::Class2 + : self::Class2::field = field, super core::Object::•() + ; +} +static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); +static field (core::int) → self::Class1 Class1_new = #C1; +static field (core::int) → self::Class2 Class2_new = #C2; +static method main() → dynamic { + core::print("inSoundMode: ${self::inSoundMode}"); + self::testInferred(); +} +static method testInferred() → dynamic { + (core::int) → self::Class1 f1a = #C1; + self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1); + self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1); + self::Class1 c1a = f1a(0){(core::int) → self::Class1}; + self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); + () → Null { + f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; + }; + dynamic f1b = #C1; + dynamic c1b = f1b{dynamic}.call(0); + self::expect(true, c1b is{ForNonNullableByDefault} self::Class1); + self::throws(() → dynamic => f1b{dynamic}.call("")); + (core::int) → self::Class2 f2a = #C2; + self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2); + self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2); + self::Class2 c2a = f2a(0){(core::int) → self::Class2}; + self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); + () → Null { + f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(''); // error + ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; + }; + dynamic f2b = #C2; + dynamic c2b = f2b{dynamic}.call(0); + self::expect(true, c2b is{ForNonNullableByDefault} self::Class2); + self::throws(() → dynamic => f2b{dynamic}.call("")); +} +static method expect(dynamic expected, dynamic actual) → dynamic { + if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) + throw "Expected ${expected}, actual ${actual}"; +} +static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C3}) → dynamic { + try { + f(){() → dynamic}; + } + on core::Object catch(final core::Object e) { + core::print("Thrown: ${e}"); + return; + } + if(!self::inSoundMode && inSoundModeOnly) { + return; + } + throw "Expected exception"; +} + +constants { + #C1 = constructor-tearoff self::Class1::• + #C2 = constructor-tearoff self::Class2::• + #C3 = false +}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart index fc8cba1..1750b68 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart
@@ -25,6 +25,9 @@ Class2(this.field); } +var Class1_new = Class1.new; +var Class2_new = Class2.new; + testInferred() { var f1a = Class1.new; expect(true, f1a is Class1 Function(int));
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect index f11dd53..8770854 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect
@@ -2,11 +2,21 @@ // // Problems in library: // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. +// - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class1_new = Class1.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. +// - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class2_new = Class2.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f1a(''); // error // ^ // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f2a(''); // error // ^ // @@ -36,6 +46,14 @@ return new self::Class2::•(field); } static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>); +static field (dynamic) → self::Class1 Class1_new = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. + - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class1_new = Class1.new; + ^" in (#C1) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class1; +static field (dynamic) → self::Class2 Class2_new = let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. + - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class2_new = Class2.new; + ^" in (#C2) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class2; static method main() → dynamic { core::print("inSoundMode: ${self::inSoundMode}"); self::testInferred(); @@ -47,7 +65,7 @@ self::Class1 c1a = f1a(0){(core::int) → self::Class1}; self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); () → Null { - f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f1a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; }; @@ -61,7 +79,7 @@ self::Class2 c2a = f2a(0){(core::int) → self::Class2}; self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); () → Null { - f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f2a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect index ff0482b..2d658941 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect
@@ -2,11 +2,21 @@ // // Problems in library: // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. +// - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class1_new = Class1.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. +// - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class2_new = Class2.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f1a(''); // error // ^ // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f2a(''); // error // ^ // @@ -36,6 +46,14 @@ return new self::Class2::•(field); } static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); +static field (dynamic) → self::Class1 Class1_new = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. + - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class1_new = Class1.new; + ^" in (#C1) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class1; +static field (dynamic) → self::Class2 Class2_new = let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. + - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class2_new = Class2.new; + ^" in (#C2) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class2; static method main() → dynamic { core::print("inSoundMode: ${self::inSoundMode}"); self::testInferred(); @@ -47,7 +65,7 @@ self::Class1 c1a = f1a(0){(core::int) → self::Class1}; self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); () → Null { - f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f1a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; }; @@ -61,7 +79,7 @@ self::Class2 c2a = f2a(0){(core::int) → self::Class2}; self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); () → Null { - f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f2a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect index 9e086db..94115d1 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect
@@ -1,20 +1,18 @@ final bool inSoundMode = <int?>[] is! List<int>; main() {} - class Class1 { int field; Class1(this.field); } - abstract class Interface2 { int get field; } - class Class2 implements Interface2 { final field; Class2(this.field); } - +var Class1_new = Class1.new; +var Class2_new = Class2.new; testInferred() {} expect(expected, actual) {} throws(Function() f, {bool inSoundModeOnly: false}) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect index f11dd53..8770854 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect
@@ -2,11 +2,21 @@ // // Problems in library: // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. +// - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class1_new = Class1.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. +// - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class2_new = Class2.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f1a(''); // error // ^ // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f2a(''); // error // ^ // @@ -36,6 +46,14 @@ return new self::Class2::•(field); } static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>); +static field (dynamic) → self::Class1 Class1_new = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. + - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class1_new = Class1.new; + ^" in (#C1) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class1; +static field (dynamic) → self::Class2 Class2_new = let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. + - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class2_new = Class2.new; + ^" in (#C2) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class2; static method main() → dynamic { core::print("inSoundMode: ${self::inSoundMode}"); self::testInferred(); @@ -47,7 +65,7 @@ self::Class1 c1a = f1a(0){(core::int) → self::Class1}; self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); () → Null { - f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f1a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; }; @@ -61,7 +79,7 @@ self::Class2 c2a = f2a(0){(core::int) → self::Class2}; self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); () → Null { - f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f2a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect index 802525c..a9eb8a4 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect
@@ -22,6 +22,8 @@ return new self::Class2::•(field); } static final field core::bool inSoundMode; +static field (dynamic) → self::Class1 Class1_new; +static field (dynamic) → self::Class2 Class2_new; static method main() → dynamic ; static method testInferred() → dynamic
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect index ff0482b..2d658941 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect
@@ -2,11 +2,21 @@ // // Problems in library: // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. +// - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class1_new = Class1.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. +// - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +// var Class2_new = Class2.new; +// ^ +// +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f1a(''); // error // ^ // -// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. +// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. // f2a(''); // error // ^ // @@ -36,6 +46,14 @@ return new self::Class2::•(field); } static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); +static field (dynamic) → self::Class1 Class1_new = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:28:18: Error: A value of type 'Class1 Function(int)' can't be assigned to a variable of type 'Class1 Function(dynamic)'. + - 'Class1' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class1_new = Class1.new; + ^" in (#C1) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class1; +static field (dynamic) → self::Class2 Class2_new = let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:29:18: Error: A value of type 'Class2 Function(int)' can't be assigned to a variable of type 'Class2 Function(dynamic)'. + - 'Class2' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart'. +var Class2_new = Class2.new; + ^" in (#C2) as{TypeError,ForNonNullableByDefault} (dynamic) → self::Class2; static method main() → dynamic { core::print("inSoundMode: ${self::inSoundMode}"); self::testInferred(); @@ -47,7 +65,7 @@ self::Class1 c1a = f1a(0){(core::int) → self::Class1}; self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); () → Null { - f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:35:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f1a(let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f1a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; }; @@ -61,7 +79,7 @@ self::Class2 c2a = f2a(0){(core::int) → self::Class2}; self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); () → Null { - f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:49:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. + f2a(let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. f2a(''); // error ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; };
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status index 96b0f76..0b30a52 100644 --- a/pkg/front_end/testcases/strong.status +++ b/pkg/front_end/testcases/strong.status
@@ -9,6 +9,7 @@ dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854 constructor_tearoffs/const_tear_off: RuntimeError +constructor_tearoffs/inferred_constructor_tear_off: RuntimeError constructor_tearoffs/redirecting_constructors: RuntimeError constructor_tearoffs/redirecting_factory_tear_off: RuntimeError extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status index 0aa79ba..29295ce 100644 --- a/pkg/front_end/testcases/text_serialization.status +++ b/pkg/front_end/testcases/text_serialization.status
@@ -7,6 +7,7 @@ # Kernel files are produced by compiling Dart code via Fasta. constructor_tearoffs/const_tear_off: RuntimeError +constructor_tearoffs/inferred_constructor_tear_off: RuntimeError constructor_tearoffs/redirecting_constructors: RuntimeError constructor_tearoffs/redirecting_factory_tear_off: RuntimeError extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status index 3f5fe28..b961189 100644 --- a/pkg/front_end/testcases/textual_outline.status +++ b/pkg/front_end/testcases/textual_outline.status
@@ -29,7 +29,9 @@ constructor_tearoffs/generic_tearoff_with_context: FormatterCrash constructor_tearoffs/generic_tearoff_without_context: FormatterCrash constructor_tearoffs/identical_instantiated_function_tearoffs: FormatterCrash +constructor_tearoffs/inferred_constructor_tear_off: FormatterCrash constructor_tearoffs/instantiation: FormatterCrash +constructor_tearoffs/lowering/inferred_constructor_tear_off: FormatterCrash constructor_tearoffs/nongeneric_tearoff_with_context: FormatterCrash constructor_tearoffs/nongeneric_tearoff_without_context: FormatterCrash constructor_tearoffs/redirecting_constructors: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status index b92823f..569aa45 100644 --- a/pkg/front_end/testcases/weak.status +++ b/pkg/front_end/testcases/weak.status
@@ -12,6 +12,7 @@ dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854 constructor_tearoffs/const_tear_off: RuntimeError +constructor_tearoffs/inferred_constructor_tear_off: RuntimeError constructor_tearoffs/redirecting_constructors: RuntimeError constructor_tearoffs/redirecting_factory_tear_off: RuntimeError extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
diff --git a/tools/VERSION b/tools/VERSION index ca41d7f..c32c3d3 100644 --- a/tools/VERSION +++ b/tools/VERSION
@@ -27,5 +27,5 @@ MAJOR 2 MINOR 14 PATCH 0 -PRERELEASE 346 +PRERELEASE 347 PRERELEASE_PATCH 0 \ No newline at end of file