[cfe] Skip running tests with no/empty main
+ always serialize to dill, but only to disk when running the test.
Change-Id: If1500931ea951229fb2502defe9d0315ea5f1883
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245006
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index bbbcbc6b..53269b2 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -421,9 +421,7 @@
}
}
steps.add(const EnsureNoErrors());
- if (!skipVm) {
- steps.add(const WriteDill());
- }
+ steps.add(new WriteDill(skipVm: skipVm));
if (semiFuzz) {
steps.add(const FuzzCompiles());
}
@@ -826,6 +824,11 @@
@override
Future<Result<ComponentResult>> run(
ComponentResult result, FastaContext context) async {
+ Uri? outputUri = result.outputUri;
+ if (outputUri == null) {
+ return pass(result);
+ }
+
FolderOptions folderOptions =
context.computeFolderOptions(result.description);
Map<ExperimentalFlag, bool> experimentalFlags = folderOptions
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index d526f13..3457bb1 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -4,6 +4,7 @@
library fasta.testing.kernel_chain;
+import 'dart:async';
import 'dart:io' show Directory, File, IOSink, Platform;
import 'dart:typed_data' show Uint8List;
@@ -32,7 +33,16 @@
import 'package:front_end/src/fasta/messages.dart'
show DiagnosticMessageFromJson, LocatedMessage, Message;
-import 'package:kernel/ast.dart' show Component, Library, Reference, Source;
+import 'package:kernel/ast.dart'
+ show
+ Block,
+ Component,
+ Library,
+ Procedure,
+ Reference,
+ ReturnStatement,
+ Source,
+ Statement;
import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
@@ -423,7 +433,9 @@
}
class WriteDill extends Step<ComponentResult, ComponentResult, ChainContext> {
- const WriteDill();
+ final bool skipVm;
+
+ const WriteDill({required this.skipVm});
@override
String get name => "write .dill";
@@ -431,29 +443,62 @@
@override
Future<Result<ComponentResult>> run(ComponentResult result, _) async {
Component component = result.component;
- Directory tmp = await Directory.systemTemp.createTemp();
- Uri uri = tmp.uri.resolve("generated.dill");
- File generated = new File.fromUri(uri);
- IOSink sink = generated.openWrite();
- result = new ComponentResult(
- result.description,
- result.component,
- result.userLibraries,
- result.compilationSetup,
- result.sourceTarget,
- uri);
+ Procedure? mainMethod = component.mainMethod;
+ bool writeToFile = true;
+ if (mainMethod == null) {
+ writeToFile = false;
+ } else {
+ Statement? mainBody = mainMethod.function.body;
+ if (mainBody is Block && mainBody.statements.isEmpty ||
+ mainBody is ReturnStatement && mainBody.expression == null) {
+ writeToFile = false;
+ }
+ }
+
+ Sink<List<int>> sink;
+ String writeMessage;
+ if (writeToFile && !skipVm) {
+ Directory tmp = await Directory.systemTemp.createTemp();
+ Uri uri = tmp.uri.resolve("generated.dill");
+ File generated = new File.fromUri(uri);
+ sink = generated.openWrite();
+ result = new ComponentResult(
+ result.description,
+ result.component,
+ result.userLibraries,
+ result.compilationSetup,
+ result.sourceTarget,
+ uri);
+ writeMessage = "Wrote component to `${generated.path}`";
+ } else {
+ sink = new DevNullSink();
+ writeMessage = "Wrote component to /dev/null";
+ }
try {
+ // TODO(johnniwinther,jensj): Avoid serializing the sdk.
new BinaryPrinter(sink).writeComponentFile(component);
} catch (e, s) {
return fail(result, e, s);
} finally {
- print("Wrote `${generated.path}`");
- await sink.close();
+ print(writeMessage);
+ if (sink is IOSink) {
+ await sink.close();
+ } else {
+ sink.close();
+ }
}
return pass(result);
}
}
+class DevNullSink<T> extends Sink<T> {
+ @override
+ void add(T data) {}
+
+ @override
+ void close() {}
+}
+
class ReadDill extends Step<Uri, Uri, ChainContext> {
const ReadDill();
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 09865af..889ec70 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -31,12 +31,10 @@
extensions/static_access_of_instance: RuntimeError
general/abstract_members: TypeCheckError
general/accessors: RuntimeError
-general/ambiguous_exports: RuntimeError
general/await_in_non_async: RuntimeError
general/bounded_implicit_instantiation: TypeCheckError
general/bounds_instances: TypeCheckError
general/bug30695: TypeCheckError
-general/bug31124: RuntimeError
general/call: RuntimeError
general/cascade: RuntimeError
general/constructor_initializer_invalid: RuntimeError
@@ -50,50 +48,19 @@
general/error_locations/error_location_01: RuntimeError
general/error_locations/error_location_02: RuntimeError
general/error_locations/error_location_03: RuntimeError
-general/error_locations/error_location_05: RuntimeError
-general/error_locations/error_location_06: RuntimeError
-general/error_recovery/await_not_in_async: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_general.crash: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_get.crash: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_return_type.crash: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_set.crash: RuntimeError
-general/error_recovery/constructor_recovery_get: RuntimeError
-general/error_recovery/constructor_recovery_ok: RuntimeError
-general/error_recovery/constructor_recovery_operator.crash: RuntimeError
-general/error_recovery/constructor_recovery_return_type: RuntimeError
-general/error_recovery/constructor_recovery_set: RuntimeError
general/error_recovery/empty_await_for: RuntimeError
general/error_recovery/empty_for: RuntimeError
-general/error_recovery/issue_38415.crash: RuntimeError
-general/error_recovery/issue_39024.crash: RuntimeError
-general/error_recovery/issue_39026.crash: RuntimeError
-general/error_recovery/issue_39026_prime.crash: RuntimeError
-general/error_recovery/issue_39033.crash: RuntimeError
-general/error_recovery/issue_39033b.crash: RuntimeError
-general/error_recovery/issue_39058.crash: RuntimeError
-general/error_recovery/issue_39058_prime.crash: RuntimeError
-general/error_recovery/issue_39202.crash: RuntimeError
-general/error_recovery/issue_39230.crash: RuntimeError
-general/error_recovery/issue_39958_01: RuntimeError
-general/error_recovery/issue_39958_02: RuntimeError
-general/error_recovery/issue_39958_03: RuntimeError
-general/error_recovery/issue_39958_04: RuntimeError
general/error_recovery/weekly_bot_91_failure: Crash
-general/error_recovery/yield_not_in_generator: RuntimeError
general/expressions: RuntimeError
general/getter_vs_setter_type: TypeCheckError
general/implement_semi_stub: TypeCheckError
general/implicit_super_call: TypeCheckError
-general/incomplete_field_formal_parameter: RuntimeError
general/infer_field_from_multiple2: TypeCheckError
general/infer_field_from_multiple: TypeCheckError
general/invalid_operator: TypeCheckError
general/invalid_operator_override: TypeCheckError
general/invocations: TypeCheckError
general/issue37776: RuntimeError
-general/issue38938: RuntimeError
-general/issue38944: RuntimeError
-general/issue38961: RuntimeError
general/issue41210a: TypeCheckError
general/issue41210b/issue41210.no_link: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
@@ -117,7 +84,6 @@
general/redirecting_factory_invocation_in_invalid: TypeCheckError
general/spread_collection: RuntimeError # Should be fixed as part of implementing spread collection support
general/super_semi_stub: TypeCheckError
-general/type_parameter_type_named_int: RuntimeError
general/type_variable_as_super: RuntimeError
general/unsound_promotion: TypeCheckError
general/void_methods: RuntimeError
@@ -176,32 +142,23 @@
rasta/bad_setter_initializer: RuntimeError
rasta/breaking_bad: RuntimeError
rasta/class_hierarchy: RuntimeError
-rasta/class_member: RuntimeError
rasta/constant_get_and_invoke: RuntimeError
-rasta/duplicated_mixin: RuntimeError
-rasta/export: RuntimeError
-rasta/foo: RuntimeError
rasta/generic_factory: RuntimeError
rasta/issue_000001: RuntimeError
rasta/issue_000031: RuntimeError
rasta/issue_000032: RuntimeError
rasta/issue_000034: RuntimeError
rasta/issue_000036: RuntimeError
-rasta/issue_000039: RuntimeError
rasta/issue_000041: RuntimeError
rasta/issue_000042: RuntimeError
-rasta/issue_000043: RuntimeError
rasta/issue_000044: RuntimeError
-rasta/issue_000046: RuntimeError
rasta/issue_000081: RuntimeError
rasta/malformed_const_constructor: RuntimeError
rasta/malformed_function: RuntimeError
rasta/mixin_library: TypeCheckError
-rasta/native_is_illegal: RuntimeError
rasta/parser_error: RuntimeError
rasta/static: RuntimeError
rasta/super: TypeCheckError
-rasta/super_initializer: RuntimeError
rasta/super_mixin: TypeCheckError
rasta/super_operator: TypeCheckError
rasta/type_literals: RuntimeError
@@ -212,7 +169,6 @@
rasta/unresolved_recovery: TypeCheckError
regress/issue_29976: RuntimeError
regress/issue_29982: RuntimeError
-regress/issue_30836: RuntimeError
regress/issue_31180: TypeCheckError
regress/issue_32972: RuntimeError
regress/issue_33452: RuntimeError
@@ -223,15 +179,8 @@
regress/issue_35259: RuntimeError
regress/issue_35260: RuntimeError
regress/issue_35266: RuntimeError
-regress/issue_36400: RuntimeError
-regress/issue_36647: RuntimeError
-regress/issue_36647_2: RuntimeError
-regress/issue_36669: RuntimeError
regress/issue_37285: RuntimeError
-regress/issue_39035.crash: RuntimeError
-regress/issue_39091_1: RuntimeError
regress/issue_39091_2: RuntimeError
-regress/utf_16_le_content.crash: RuntimeError
runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
set_literals/disambiguation_rule: RuntimeError
value_class/copy_with_call_sites: RuntimeError # Expected
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index db831f6..3926219 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -121,12 +121,10 @@
extensions/static_access_of_instance: RuntimeError
general/abstract_members: TypeCheckError
general/accessors: RuntimeError
-general/ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
general/await_in_non_async: RuntimeError # Expected.
general/bounded_implicit_instantiation: TypeCheckError
general/bounds_instances: TypeCheckError
general/bug30695: TypeCheckError
-general/bug31124: RuntimeError # Test has no main method (and we shouldn't add one).
general/call: RuntimeError
general/cascade: RuntimeError
general/constructor_initializer_invalid: RuntimeError # Fails execution after recovery
@@ -140,50 +138,19 @@
general/error_locations/error_location_01: RuntimeError
general/error_locations/error_location_02: RuntimeError
general/error_locations/error_location_03: RuntimeError
-general/error_locations/error_location_05: RuntimeError
-general/error_locations/error_location_06: RuntimeError
-general/error_recovery/await_not_in_async: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_general.crash: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_get.crash: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_return_type.crash: RuntimeError
-general/error_recovery/constructor_recovery_bad_name_set.crash: RuntimeError
-general/error_recovery/constructor_recovery_get: RuntimeError
-general/error_recovery/constructor_recovery_ok: RuntimeError
-general/error_recovery/constructor_recovery_operator.crash: RuntimeError
-general/error_recovery/constructor_recovery_return_type: RuntimeError
-general/error_recovery/constructor_recovery_set: RuntimeError
general/error_recovery/empty_await_for: RuntimeError
general/error_recovery/empty_for: RuntimeError
-general/error_recovery/issue_38415.crash: RuntimeError
-general/error_recovery/issue_39024.crash: RuntimeError
-general/error_recovery/issue_39026.crash: RuntimeError
-general/error_recovery/issue_39026_prime.crash: RuntimeError
-general/error_recovery/issue_39033.crash: RuntimeError
-general/error_recovery/issue_39033b.crash: RuntimeError
-general/error_recovery/issue_39058.crash: RuntimeError
-general/error_recovery/issue_39058_prime.crash: RuntimeError
-general/error_recovery/issue_39202.crash: RuntimeError
-general/error_recovery/issue_39230.crash: RuntimeError
-general/error_recovery/issue_39958_01: RuntimeError
-general/error_recovery/issue_39958_02: RuntimeError
-general/error_recovery/issue_39958_03: RuntimeError
-general/error_recovery/issue_39958_04: RuntimeError
general/error_recovery/weekly_bot_91_failure: Crash
-general/error_recovery/yield_not_in_generator: RuntimeError
general/expressions: RuntimeError
general/getter_vs_setter_type: TypeCheckError
general/implement_semi_stub: TypeCheckError
general/implicit_super_call: TypeCheckError
-general/incomplete_field_formal_parameter: RuntimeError
general/infer_field_from_multiple2: TypeCheckError
general/infer_field_from_multiple: TypeCheckError
general/invalid_operator: TypeCheckError
general/invalid_operator_override: TypeCheckError
general/invocations: TypeCheckError
general/issue37776: RuntimeError
-general/issue38938: RuntimeError # no main and compile time errors.
-general/issue38944: RuntimeError # no main and compile time errors.
-general/issue38961: RuntimeError # no main and compile time errors.
general/issue41210a: TypeCheckError
general/issue41210b/issue41210.no_link: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
@@ -208,7 +175,6 @@
general/redirecting_factory_invocation_in_invalid: TypeCheckError
general/spread_collection: RuntimeError
general/super_semi_stub: TypeCheckError
-general/type_parameter_type_named_int: RuntimeError # Expected
general/type_variable_as_super: RuntimeError
general/unsound_promotion: TypeCheckError
general/void_methods: RuntimeError
@@ -266,32 +232,23 @@
rasta/bad_setter_initializer: RuntimeError
rasta/breaking_bad: RuntimeError
rasta/class_hierarchy: RuntimeError
-rasta/class_member: RuntimeError
rasta/constant_get_and_invoke: RuntimeError
-rasta/duplicated_mixin: RuntimeError # Expected, this file has no main method.
-rasta/export: RuntimeError # Expected, this file has no main method.
-rasta/foo: RuntimeError # Expected, this file has no main method.
rasta/generic_factory: RuntimeError
rasta/issue_000001: RuntimeError
rasta/issue_000031: RuntimeError
rasta/issue_000032: RuntimeError
rasta/issue_000034: RuntimeError
rasta/issue_000036: RuntimeError
-rasta/issue_000039: RuntimeError
rasta/issue_000041: RuntimeError
rasta/issue_000042: RuntimeError
-rasta/issue_000043: RuntimeError
rasta/issue_000044: RuntimeError
-rasta/issue_000046: RuntimeError
rasta/issue_000081: RuntimeError
rasta/malformed_const_constructor: RuntimeError
rasta/malformed_function: RuntimeError
rasta/mixin_library: TypeCheckError
-rasta/native_is_illegal: RuntimeError
rasta/parser_error: RuntimeError
rasta/static: RuntimeError
rasta/super: TypeCheckError
-rasta/super_initializer: RuntimeError
rasta/super_mixin: TypeCheckError
rasta/super_operator: TypeCheckError
rasta/type_literals: RuntimeError
@@ -302,7 +259,6 @@
rasta/unresolved_recovery: TypeCheckError
regress/issue_29976: RuntimeError # Tests runtime behavior of error recovery.
regress/issue_29982: RuntimeError # Tests runtime behavior of error recovery.
-regress/issue_30836: RuntimeError # Issue 30836.
regress/issue_31180: TypeCheckError
regress/issue_32972: RuntimeError
regress/issue_33452: RuntimeError # Test has an intentional error
@@ -313,15 +269,8 @@
regress/issue_35259: RuntimeError # Expected
regress/issue_35260: RuntimeError # Expected
regress/issue_35266: RuntimeError # Expected
-regress/issue_36400: RuntimeError
-regress/issue_36647: RuntimeError # Expected
-regress/issue_36647_2: RuntimeError # Expected
-regress/issue_36669: RuntimeError
regress/issue_37285: RuntimeError
-regress/issue_39035.crash: RuntimeError
-regress/issue_39091_1: RuntimeError
regress/issue_39091_2: RuntimeError
-regress/utf_16_le_content.crash: RuntimeError
runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
set_literals/disambiguation_rule: RuntimeError