From b6f03e150e1981656ec143de358b70fe3d8f6f53 Mon Sep 17 00:00:00 2001 From: Jens Johansen Date: Mon, 21 Mar 2022 11:41:48 +0000 Subject: [PATCH] [CFE] Reproduction & fix of crashes found by weekly bot (#83) Calling "SpecialCasedBinaryOperator" and "SpecialCasedTernaryOperator" with wrong number of parameters (especially too few) would not go well. It's now checked and goes a lot better. Change-Id: Id9606db869f020bbd7264686adaf9521bd263fb9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/237900 Reviewed-by: Johnni Winther Commit-Queue: Jens Johansen --- .../fasta/type_inference/type_inferrer.dart | 47 +++++++++++++------ .../test/fasta/expression_suite.dart | 8 ++++ .../weekly_bot_run_83_crash.expression.yaml | 9 ++++ ...ly_bot_run_83_crash.expression.yaml.expect | 7 +++ .../weekly_bot_run_83_crash_2.expression.yaml | 9 ++++ ..._bot_run_83_crash_2.expression.yaml.expect | 7 +++ ...y_bot_run_83_crash_2_prime.expression.yaml | 9 ++++ ...un_83_crash_2_prime.expression.yaml.expect | 4 ++ ...kly_bot_run_83_crash_prime.expression.yaml | 9 ++++ ..._run_83_crash_prime.expression.yaml.expect | 4 ++ .../error_recovery/weekly_bot_83_failure.dart | 10 ++++ ...bot_83_failure.dart.textual_outline.expect | 2 + ...ilure.dart.textual_outline_modelled.expect | 2 + .../weekly_bot_83_failure.dart.weak.expect | 22 +++++++++ ...ly_bot_83_failure.dart.weak.modular.expect | 22 +++++++++ ...ly_bot_83_failure.dart.weak.outline.expect | 8 ++++ ...ot_83_failure.dart.weak.transformed.expect | 22 +++++++++ .../weekly_bot_83_failure_2.dart | 10 ++++ ...t_83_failure_2.dart.textual_outline.expect | 2 + ...ure_2.dart.textual_outline_modelled.expect | 2 + .../weekly_bot_83_failure_2.dart.weak.expect | 22 +++++++++ ..._bot_83_failure_2.dart.weak.modular.expect | 22 +++++++++ ..._bot_83_failure_2.dart.weak.outline.expect | 8 ++++ ..._83_failure_2.dart.weak.transformed.expect | 22 +++++++++ 24 files changed, 275 insertions(+), 14 deletions(-) create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml create mode 100644 pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect create mode 100644 pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect 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 53b1b32337b7..1e4d084ac1b1 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 @@ -2488,20 +2488,39 @@ class TypeInferrerImpl implements TypeInferrer { namedIndex == arguments.named.length, "Expected 'namedIndex' to be ${arguments.named.length}, " "got ${namedIndex}."); - if (isSpecialCasedBinaryOperator) { - calleeType = replaceReturnType( - calleeType, - typeSchemaEnvironment.getTypeOfSpecialCasedBinaryOperator( - receiverType!, actualTypes![0], - isNonNullableByDefault: isNonNullableByDefault)); - } else if (isSpecialCasedTernaryOperator) { - calleeType = replaceReturnType( - calleeType, - typeSchemaEnvironment.getTypeOfSpecialCasedTernaryOperator( - receiverType!, - actualTypes![0], - actualTypes[1], - libraryBuilder.library)); + + if (isSpecialCasedBinaryOperator || isSpecialCasedTernaryOperator) { + if (typeChecksNeeded && !identical(calleeType, unknownFunction)) { + LocatedMessage? argMessage = helper!.checkArgumentsForType( + calleeType, arguments, offset, + isExtensionMemberInvocation: isExtensionMemberInvocation); + if (argMessage != null) { + return new WrapInProblemInferenceResult( + const InvalidType(), + const InvalidType(), + argMessage.messageObject, + argMessage.charOffset, + argMessage.length, + helper!, + isInapplicable: true, + hoistedArguments: localHoistedExpressions); + } + } + if (isSpecialCasedBinaryOperator) { + calleeType = replaceReturnType( + calleeType, + typeSchemaEnvironment.getTypeOfSpecialCasedBinaryOperator( + receiverType!, actualTypes![0], + isNonNullableByDefault: isNonNullableByDefault)); + } else if (isSpecialCasedTernaryOperator) { + calleeType = replaceReturnType( + calleeType, + typeSchemaEnvironment.getTypeOfSpecialCasedTernaryOperator( + receiverType!, + actualTypes![0], + actualTypes[1], + libraryBuilder.library)); + } } // Check for and remove duplicated named arguments. diff --git a/pkg/front_end/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart index f7f252888f69..e8871b65093f 100644 --- a/pkg/front_end/test/fasta/expression_suite.dart +++ b/pkg/front_end/test/fasta/expression_suite.dart @@ -67,6 +67,8 @@ import 'package:vm/target/vm.dart' show VmTarget; import "package:yaml/yaml.dart" show YamlMap, YamlList, loadYamlNode; +import '../testing_utils.dart' show checkEnvironment; + import '../utils/kernel_chain.dart' show runDiff, openWrite; class Context extends ChainContext { @@ -568,6 +570,12 @@ class CompileExpression extends Step, List, Context> { Future createContext( Chain suite, Map environment) async { + const Set knownEnvironmentKeys = { + "updateExpectations", + "fuzz", + }; + checkEnvironment(environment, knownEnvironmentKeys); + final Uri base = Uri.parse("org-dartlang-test:///"); /// Unused because we supply entry points to [computeDelta] directly above. diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml new file mode 100644 index 000000000000..32436f44bd30 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml @@ -0,0 +1,9 @@ +# Copyright (c) 2022, 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. + +sources: "" +definitions: [] +position: "dart:core#double" +expression: | + remainder() diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect new file mode 100644 index 000000000000..562772f1256e --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect @@ -0,0 +1,7 @@ +Errors: { + org-dartlang-debug:synthetic_debug_expression:1:10: Error: Too few positional arguments: 1 required, 0 given. + remainder() + ^ +} +method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic + return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:10: Error: Too few positional arguments: 1 required, 0 given.\nremainder()\n ^" in this.{dart.core::double::remainder}{}.(){() → invalid-type}; diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml new file mode 100644 index 000000000000..06be5ad5d105 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml @@ -0,0 +1,9 @@ +# Copyright (c) 2022, 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. + +sources: "" +definitions: [] +position: "dart:core#double" +expression: | + clamp() diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect new file mode 100644 index 000000000000..79d8f70a0553 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect @@ -0,0 +1,7 @@ +Errors: { + org-dartlang-debug:synthetic_debug_expression:1:6: Error: Too few positional arguments: 2 required, 0 given. + clamp() + ^ +} +method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic + return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:6: Error: Too few positional arguments: 2 required, 0 given.\nclamp()\n ^" in this.{dart.core::num::clamp}{}.(){() → invalid-type}; diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml new file mode 100644 index 000000000000..969b86756180 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml @@ -0,0 +1,9 @@ +# Copyright (c) 2022, 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. + +sources: "" +definitions: [] +position: "dart:core#double" +expression: | + clamp(42, 42) diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect new file mode 100644 index 000000000000..22d3276d3836 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect @@ -0,0 +1,4 @@ +Errors: { +} +method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic + return this.{dart.core::num::clamp}(42, 42){(dart.core::num, dart.core::num) → dart.core::num}; diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml new file mode 100644 index 000000000000..ed211a30d8d6 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml @@ -0,0 +1,9 @@ +# Copyright (c) 2022, 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. + +sources: "" +definitions: [] +position: "dart:core#double" +expression: | + remainder(42) diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect new file mode 100644 index 000000000000..3d31b64524c1 --- /dev/null +++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect @@ -0,0 +1,4 @@ +Errors: { +} +method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic + return this.{dart.core::double::remainder}(42){(dart.core::num) → dart.core::double}; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart new file mode 100644 index 000000000000..f98757e200f0 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart @@ -0,0 +1,10 @@ +main2() { + double x = 42; + x.remainder(); +} + +main(List args) { + if (args.length == 42) { + main2(); + } +} \ No newline at end of file diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect new file mode 100644 index 000000000000..db0697d9c568 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect @@ -0,0 +1,2 @@ +main2() {} +main(List args) {} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect new file mode 100644 index 000000000000..8cb08e15fb46 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect @@ -0,0 +1,2 @@ +main(List args) {} +main2() {} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect new file mode 100644 index 000000000000..8e0ea4f94c78 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect @@ -0,0 +1,22 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given. +// x.remainder(); +// ^ +// +import self as self; +import "dart:core" as core; + +static method main2() → dynamic { + core::double x = 42.0; + invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given. + x.remainder(); + ^" in x.{core::double::remainder}{}.(){() → invalid-type}; +} +static method main(core::List args) → dynamic { + if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) { + self::main2(); + } +} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect new file mode 100644 index 000000000000..8e0ea4f94c78 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect @@ -0,0 +1,22 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given. +// x.remainder(); +// ^ +// +import self as self; +import "dart:core" as core; + +static method main2() → dynamic { + core::double x = 42.0; + invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given. + x.remainder(); + ^" in x.{core::double::remainder}{}.(){() → invalid-type}; +} +static method main(core::List args) → dynamic { + if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) { + self::main2(); + } +} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect new file mode 100644 index 000000000000..250a282589b4 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect @@ -0,0 +1,8 @@ +library /*isNonNullableByDefault*/; +import self as self; +import "dart:core" as core; + +static method main2() → dynamic + ; +static method main(core::List args) → dynamic + ; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect new file mode 100644 index 000000000000..8e0ea4f94c78 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect @@ -0,0 +1,22 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given. +// x.remainder(); +// ^ +// +import self as self; +import "dart:core" as core; + +static method main2() → dynamic { + core::double x = 42.0; + invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given. + x.remainder(); + ^" in x.{core::double::remainder}{}.(){() → invalid-type}; +} +static method main(core::List args) → dynamic { + if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) { + self::main2(); + } +} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart new file mode 100644 index 000000000000..be427e6b925d --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart @@ -0,0 +1,10 @@ +main2() { + double x = 42; + x.clamp(); +} + +main(List args) { + if (args.length == 42) { + main2(); + } +} \ No newline at end of file diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect new file mode 100644 index 000000000000..db0697d9c568 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect @@ -0,0 +1,2 @@ +main2() {} +main(List args) {} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect new file mode 100644 index 000000000000..8cb08e15fb46 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect @@ -0,0 +1,2 @@ +main(List args) {} +main2() {} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect new file mode 100644 index 000000000000..ff2ca09e04f0 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect @@ -0,0 +1,22 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given. +// x.clamp(); +// ^ +// +import self as self; +import "dart:core" as core; + +static method main2() → dynamic { + core::double x = 42.0; + invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given. + x.clamp(); + ^" in x.{core::num::clamp}{}.(){() → invalid-type}; +} +static method main(core::List args) → dynamic { + if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) { + self::main2(); + } +} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect new file mode 100644 index 000000000000..ff2ca09e04f0 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect @@ -0,0 +1,22 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given. +// x.clamp(); +// ^ +// +import self as self; +import "dart:core" as core; + +static method main2() → dynamic { + core::double x = 42.0; + invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given. + x.clamp(); + ^" in x.{core::num::clamp}{}.(){() → invalid-type}; +} +static method main(core::List args) → dynamic { + if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) { + self::main2(); + } +} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect new file mode 100644 index 000000000000..250a282589b4 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect @@ -0,0 +1,8 @@ +library /*isNonNullableByDefault*/; +import self as self; +import "dart:core" as core; + +static method main2() → dynamic + ; +static method main(core::List args) → dynamic + ; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect new file mode 100644 index 000000000000..ff2ca09e04f0 --- /dev/null +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect @@ -0,0 +1,22 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given. +// x.clamp(); +// ^ +// +import self as self; +import "dart:core" as core; + +static method main2() → dynamic { + core::double x = 42.0; + invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given. + x.clamp(); + ^" in x.{core::num::clamp}{}.(){() → invalid-type}; +} +static method main(core::List args) → dynamic { + if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) { + self::main2(); + } +}