From 6b964b83ac45d557ac721dadb7db1d3c47689c00 Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Fri, 18 Dec 2015 12:08:10 -0800 Subject: [PATCH] Add ./tools/test.py -c precompiler -r dart_precompiled. - Make --gen/run-precompiled-snapshot take a directory to use for the snapshot pieces. - Throw on Platform.executeable to prevent tests from becoming fork-bombs. - Update status files so 'dart_precompiled' is generally expected to behave the same as 'vm'. Currently multitests will fail unless run with --jobs=1 because the test harness assigns them the same temporary directory. Running this also requires a great deal of space. My out directory is 380G. BUG=http://dartbug.com/24975 R=fschneider@google.com, srdjan@google.com Review URL: https://codereview.chromium.org/1507943002 . --- runtime/bin/main.cc | 99 ++++++++++++++----- runtime/bin/platform.cc | 16 +++ runtime/include/dart_api.h | 3 + .../observatory/tests/service/service.status | 4 +- runtime/tests/vm/vm.status | 12 ++- runtime/vm/dart_api_impl.cc | 5 + runtime/vm/precompiler.cc | 1 + samples/samples.status | 2 + tests/benchmark_smoke/benchmark_smoke.status | 2 +- tests/co19/co19-runtime.status | 33 ++++--- tests/corelib/corelib.status | 28 +++--- tests/html/html.status | 2 +- tests/isolate/isolate.status | 38 ++++--- tests/language/language.status | 40 ++++---- tests/lib/lib.status | 24 ++--- tests/standalone/standalone.status | 63 ++++++++++-- tests/utils/utils.status | 6 +- tools/precompilation/precompiler.dart | 64 ++++++++++++ .../testing/dart/compiler_configuration.dart | 95 ++++++++++++++++++ tools/testing/dart/runtime_configuration.dart | 29 ++++++ tools/testing/dart/test_options.dart | 11 ++- tools/testing/dart/test_runner.dart | 4 + tools/testing/dart/test_suite.dart | 24 ++++- 23 files changed, 482 insertions(+), 123 deletions(-) create mode 100755 tools/precompilation/precompiler.dart diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc index 7fc19c44bc5..fcf53999b87 100644 --- a/runtime/bin/main.cc +++ b/runtime/bin/main.cc @@ -71,6 +71,12 @@ static bool has_gen_precompiled_snapshot = false; static bool has_run_precompiled_snapshot = false; +// Value of the --gen/run_precompiled_snapshot flag. +// (This pointer points into an argv buffer and does not need to be +// free'd.) +static const char* precompiled_snapshot_directory = NULL; + + // Global flag that is used to indicate that we want to compile everything in // the same way as precompilation before main, then continue running in the // same process. @@ -304,16 +310,18 @@ static bool ProcessCompileAllOption(const char* arg, static bool ProcessGenPrecompiledSnapshotOption( const char* arg, CommandLineOptions* vm_options) { - ASSERT(arg != NULL); - if (*arg != '\0') { - return false; - } // Ensure that we are not already running using a full snapshot. if (isolate_snapshot_buffer != NULL) { Log::PrintErr("Precompiled snapshots must be generated with" " dart_no_snapshot.\n"); return false; } + ASSERT(arg != NULL); + if ((arg[0] == '=') || (arg[0] == ':')) { + precompiled_snapshot_directory = &arg[1]; + } else { + precompiled_snapshot_directory = arg; + } has_gen_precompiled_snapshot = true; vm_options->AddArgument("--precompilation"); return true; @@ -324,8 +332,10 @@ static bool ProcessRunPrecompiledSnapshotOption( const char* arg, CommandLineOptions* vm_options) { ASSERT(arg != NULL); - if (*arg != '\0') { - return false; + precompiled_snapshot_directory = arg; + if ((precompiled_snapshot_directory[0] == '=') || + (precompiled_snapshot_directory[0] == ':')) { + precompiled_snapshot_directory = &precompiled_snapshot_directory[1]; } has_run_precompiled_snapshot = true; vm_options->AddArgument("--precompilation"); @@ -1009,34 +1019,67 @@ static void ServiceStreamCancelCallback(const char* stream_id) { } -static void WriteSnapshotFile(const char* filename, - const uint8_t* buffer, - const intptr_t size) { - File* file = File::Open(filename, File::kWriteTruncate); +static void WritePrecompiledSnapshotFile(const char* filename, + const uint8_t* buffer, + const intptr_t size) { + char* concat = NULL; + const char* qualified_filename; + if (strlen(precompiled_snapshot_directory) > 0) { + intptr_t len = snprintf(NULL, 0, "%s/%s", + precompiled_snapshot_directory, filename); + concat = new char[len + 1]; + snprintf(concat, len + 1, "%s/%s", + precompiled_snapshot_directory, filename); + qualified_filename = concat; + } else { + qualified_filename = filename; + } + + File* file = File::Open(qualified_filename, File::kWriteTruncate); ASSERT(file != NULL); if (!file->WriteFully(buffer, size)) { ErrorExit(kErrorExitCode, "Unable to open file %s for writing snapshot\n", - filename); + qualified_filename); } delete file; + if (concat != NULL) { + delete concat; + } } -static void ReadSnapshotFile(const char* filename, - const uint8_t** buffer) { - void* file = DartUtils::OpenFile(filename, false); +static void ReadPrecompiledSnapshotFile(const char* filename, + const uint8_t** buffer) { + char* concat = NULL; + const char* qualified_filename; + if (strlen(precompiled_snapshot_directory) > 0) { + intptr_t len = snprintf(NULL, 0, "%s/%s", + precompiled_snapshot_directory, filename); + concat = new char[len + 1]; + snprintf(concat, len + 1, "%s/%s", + precompiled_snapshot_directory, filename); + qualified_filename = concat; + } else { + qualified_filename = filename; + } + + void* file = DartUtils::OpenFile(qualified_filename, false); if (file == NULL) { ErrorExit(kErrorExitCode, - "Error: Unable to open file %s for reading snapshot\n", filename); + "Error: Unable to open file %s for reading snapshot\n", + qualified_filename); } intptr_t len = -1; DartUtils::ReadFile(buffer, &len, file); if (*buffer == NULL || len == -1) { ErrorExit(kErrorExitCode, - "Error: Unable to read snapshot file %s\n", filename); + "Error: Unable to read snapshot file %s\n", qualified_filename); } DartUtils::CloseFile(file); + if (concat != NULL) { + delete concat; + } } @@ -1215,15 +1258,15 @@ bool RunMainIsolate(const char* script_name, &instructions_buffer, &instructions_size); CHECK_RESULT(result); - WriteSnapshotFile(kPrecompiledVmIsolateName, - vm_isolate_buffer, - vm_isolate_size); - WriteSnapshotFile(kPrecompiledIsolateName, - isolate_buffer, - isolate_size); - WriteSnapshotFile(kPrecompiledInstructionsName, - instructions_buffer, - instructions_size); + WritePrecompiledSnapshotFile(kPrecompiledVmIsolateName, + vm_isolate_buffer, + vm_isolate_size); + WritePrecompiledSnapshotFile(kPrecompiledIsolateName, + isolate_buffer, + isolate_size); + WritePrecompiledSnapshotFile(kPrecompiledInstructionsName, + instructions_buffer, + instructions_size); } else { if (has_compile_all) { result = Dart_CompileAll(); @@ -1426,8 +1469,10 @@ void main(int argc, char** argv) { if (has_run_precompiled_snapshot) { instructions_snapshot = reinterpret_cast( LoadLibrarySymbol(kPrecompiledLibraryName, kPrecompiledSymbolName)); - ReadSnapshotFile(kPrecompiledVmIsolateName, &vm_isolate_snapshot_buffer); - ReadSnapshotFile(kPrecompiledIsolateName, &isolate_snapshot_buffer); + ReadPrecompiledSnapshotFile(kPrecompiledVmIsolateName, + &vm_isolate_snapshot_buffer); + ReadPrecompiledSnapshotFile(kPrecompiledIsolateName, + &isolate_snapshot_buffer); } // Initialize the Dart VM. diff --git a/runtime/bin/platform.cc b/runtime/bin/platform.cc index ec75ee97cb3..f2f16befee5 100644 --- a/runtime/bin/platform.cc +++ b/runtime/bin/platform.cc @@ -45,12 +45,28 @@ void FUNCTION_NAME(Platform_LocalHostname)(Dart_NativeArguments args) { void FUNCTION_NAME(Platform_ExecutableName)(Dart_NativeArguments args) { ASSERT(Platform::GetExecutableName() != NULL); + if (Dart_IsRunningPrecompiledCode()) { + // This is a work-around to be able to use most of the existing test suite + // for precompilation. Many tests do something like Process.run( + // Platform.executable, some_other_script.dart). But with precompilation + // the script is already fixed, so the spawned process runs the same script + // again and we have a fork-bomb. + Dart_ThrowException(Dart_NewStringFromCString( + "Platform.executable not supported under precompilation")); + UNREACHABLE(); + } Dart_SetReturnValue( args, Dart_NewStringFromCString(Platform::GetExecutableName())); } void FUNCTION_NAME(Platform_ResolvedExecutableName)(Dart_NativeArguments args) { + if (Dart_IsRunningPrecompiledCode()) { + Dart_ThrowException(Dart_NewStringFromCString( + "Platform.resolvedExecutable not supported under precompilation")); + UNREACHABLE(); + } + if (Platform::GetResolvedExecutableName() != NULL) { Dart_SetReturnValue( args, Dart_NewStringFromCString(Platform::GetResolvedExecutableName())); diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h index 227c84fc31d..222ef796900 100755 --- a/runtime/include/dart_api.h +++ b/runtime/include/dart_api.h @@ -2819,4 +2819,7 @@ DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot( uint8_t** instructions_snapshot_buffer, intptr_t* instructions_snapshot_size); + +DART_EXPORT bool Dart_IsRunningPrecompiledCode(); + #endif /* INCLUDE_DART_API_H_ */ /* NOLINT */ diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status index 0044c296b7e..7562cf4f28e 100644 --- a/runtime/observatory/tests/service/service.status +++ b/runtime/observatory/tests/service/service.status @@ -2,7 +2,7 @@ # 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. -[ $compiler == none && $runtime == vm ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) ] evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047 evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047 @@ -21,5 +21,5 @@ developer_extension_test: SkipByDesign [ $arch == arm ] process_service_test: Pass, Fail # Issue 24344 -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] *: Skip # Issue 24651 \ No newline at end of file diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status index 21a91f85980..40a5cb6543e 100644 --- a/runtime/tests/vm/vm.status +++ b/runtime/tests/vm/vm.status @@ -57,7 +57,7 @@ dart/inline_stack_frame_test: RuntimeError, Pass # Issue 7953 # Data uri's not supported by dart2js or the analyzer. dart/data_uri*test: Skip -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] dart/data_uri_import_test/wrongmime: RuntimeError, OK # VM is more restrictive than the browser dart/data_uri_import_test/nomime: RuntimeError, OK dart/data_uri_import_test/nocharset: RuntimeError, OK @@ -78,10 +78,16 @@ dart/snapshot_version_test: SkipByDesign # Spawns processes dart/spawn_infinite_loop_test: Skip # VM shutdown test dart/spawn_shutdown_test: Skip # VM Shutdown test -[ $runtime == vm && $mode == debug && $builder_tag == asan ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $builder_tag == asan ] cc/Dart2JSCompileAll: Skip # Timeout. [ $noopt ] -dart/redirection_type_shuffling_test: CompileTimeError # Imports dart:mirrors dart/byte_array_test: Crash # Incompatible flag --disable_alloc_stubs_after_gc + +[ $noopt || $compiler == precompiler ] +dart/redirection_type_shuffling_test: CompileTimeError # Imports dart:mirrors dart/inline_stack_frame_test: Fail # Issue 24783 - inlined frames missing + +[ $runtime == dart_precompiled ] +dart/optimized_stacktrace_test: Fail +dart/data_uri_spawn_test: RuntimeError # Isolate.spawnUri \ No newline at end of file diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc index 453baa9c179..fdb1d5374be 100644 --- a/runtime/vm/dart_api_impl.cc +++ b/runtime/vm/dart_api_impl.cc @@ -5974,4 +5974,9 @@ DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot( return Api::Success(); } + +DART_EXPORT bool Dart_IsRunningPrecompiledCode() { + return Dart::IsRunningPrecompiledCode(); +} + } // namespace dart diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc index 0b533f0120e..3475fbdef99 100644 --- a/runtime/vm/precompiler.cc +++ b/runtime/vm/precompiler.cc @@ -1087,6 +1087,7 @@ void Precompiler::VisitFunctions(FunctionVisitor* visitor) { for (intptr_t j = 0; j < closures.Length(); j++) { function ^= closures.At(j); visitor->VisitFunction(function); + ASSERT(!function.HasImplicitClosureFunction()); } } diff --git a/samples/samples.status b/samples/samples.status index 81d965440d2..480d3f30b80 100644 --- a/samples/samples.status +++ b/samples/samples.status @@ -24,3 +24,5 @@ sample_extension/test/sample_extension_test: Skip # Issue 14705 [ $arch == simarm64 ] *: Skip +[ $runtime == dart_precompiled ] +sample_extension: RuntimeError # Platform.executable diff --git a/tests/benchmark_smoke/benchmark_smoke.status b/tests/benchmark_smoke/benchmark_smoke.status index d3fe9a328c0..a83fd8942e7 100644 --- a/tests/benchmark_smoke/benchmark_smoke.status +++ b/tests/benchmark_smoke/benchmark_smoke.status @@ -2,7 +2,7 @@ # 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. -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] *: Skip [ $compiler == dart2js && $runtime == none ] diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status index c5bfba717a4..cb0ead8369e 100644 --- a/tests/co19/co19-runtime.status +++ b/tests/co19/co19-runtime.status @@ -3,7 +3,7 @@ # BSD-style license that can be found in the LICENSE file. -[ $compiler == none && ($runtime == vm || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && (($runtime == vm || $runtime == dart_precompiled) || $runtime == dartium || $runtime == ContentShellOnAndroid) ] LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # Issue 22200 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # Issue 22200 @@ -38,7 +38,7 @@ LibTest/isolate/Isolate/spawn_A02_t02: RuntimeError # Dart issue 15617 LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # Issue 13596 LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # Issue 13596 -[ $compiler == none && $runtime == vm ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) ] LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Pass, Fail # co19 issue 599 LibTest/typed_data/Float32x4/reciprocal_A01_t01: Pass, Fail # co19 issue 599 Language/Expressions/Instance_Creation/Const/abstract_class_t01: MissingCompileTimeError # Issue 22007 @@ -48,16 +48,16 @@ Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Fail Language/Libraries_and_Scripts/Exports/invalid_uri_t02: Fail Language/Libraries_and_Scripts/Parts/syntax_t06: Fail -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] LibTest/math/MutableRectangle/MutableRectangle.fromPoints_A01_t01: Pass, RuntimeError # co19-roll r607: Please triage this failure -[ $compiler == none && $runtime == vm && $mode == debug ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && $mode == debug ] LibTest/core/List/List_class_A01_t02: Pass, Slow -[ $compiler == none && $runtime == vm && ($arch != x64 && $arch != simarm64) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ($arch != x64 && $arch != simarm64) ] LibTest/core/int/operator_left_shift_A01_t02: Fail # co19 issue 129 -[ $compiler == none && $runtime == vm && $arch == mips ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && $arch == mips ] LibTest/core/double/toInt_A01_t01: Fail # These tests take too much memory (300 MB) for our 1 GB test machine. # co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673 @@ -65,30 +65,30 @@ LibTest/core/List/List_class_A01_t02: Skip # co19 issue 673 LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # co19 issue 673 LibTest/collection/ListBase/ListBase_class_A01_t02: Skip # co19 issue 673 -[ $compiler == none && $runtime == vm && $arch == mips && $mode == debug ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && $arch == mips && $mode == debug ] LibTest/isolate/Isolate/spawnUri_A01_t04: Crash, Pass # Issue 17440 LibTest/isolate/Isolate/spawn_A01_t04: Crash, Pass # Issue 17440 -[ $compiler == none && $runtime == vm && ($arch == simarm || $arch == simarmv5te || $arch == simmips || $arch == simarm64) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ($arch == simarm || $arch == simarmv5te || $arch == simmips || $arch == simarm64) ] LibTest/core/Uri/Uri_A06_t03: Skip # Timeout LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip # Timeout LibTest/collection/ListBase/ListBase_class_A01_t01: Skip # Timeout LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # Timeout LibTest/collection/ListBase/ListBase_class_A01_t02: Skip # Timeout -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] LibTest/isolate/Isolate/spawn_A02_t01: Skip # co19 issue 667 LibTest/html/*: SkipByDesign # dart:html not supported on VM. LayoutTests/fast/*: SkipByDesign # DOM not supported on VM. WebPlatformTest/*: SkipByDesign # dart:html not supported on VM. -[ $runtime == vm && $mode == debug && $builder_tag == asan ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $builder_tag == asan ] Language/Types/Interface_Types/subtype_t27: Skip # Issue 21174. -[ $runtime == vm && $arch == arm ] +[ ($runtime == vm || $runtime == dart_precompiled) && $arch == arm ] LibTest/typed_data/Float32x4/operator_multiplication_A01_t01: Fail # Dart issue 24416 -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] # co19 update Sep 29, 2015 (3ed795ea02e022ef19c77cf1b6095b7c8f5584d0) Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t01: MissingCompileTimeError # Please triage this failure Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t02: MissingCompileTimeError # Please triage this failure @@ -131,10 +131,10 @@ Language/Mixins/declaring_constructor_t01: MissingCompileTimeError # Please tria Language/Mixins/not_object_superclass_t01: MissingCompileTimeError # Please triage this failure Language/Mixins/reference_to_super_t01: MissingCompileTimeError # Please triage this failure -[ $runtime == vm && $mode == debug ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug ] Language/Mixins/Mixin_Application/wrong_type_t02: Crash # Please triage this failure -[ $runtime == vm && $checked ] +[ ($runtime == vm || $runtime == dart_precompiled) && $checked ] Language/Errors_and_Warnings/static_warning_t01: RuntimeError # Please triage this failure Language/Errors_and_Warnings/static_warning_t02: RuntimeError # Please triage this failure Language/Errors_and_Warnings/static_warning_t03: RuntimeError # Please triage this failure @@ -142,7 +142,7 @@ Language/Errors_and_Warnings/static_warning_t04: RuntimeError # Please triage th Language/Errors_and_Warnings/static_warning_t05: RuntimeError # Please triage this failure Language/Errors_and_Warnings/static_warning_t06: RuntimeError # Please triage this failure -[ $runtime == vm && $noopt ] +[ ($noopt || $compiler == precompiler) ] LibTest/collection/ListBase/ListBase_class_A01_t02: Pass, Timeout LibTest/collection/ListMixin/ListMixin_class_A01_t02: Pass, Timeout LibTest/core/Map/Map_class_A01_t04: Pass, Timeout @@ -152,3 +152,6 @@ Language/Mixins/Mixin_Application/error_t02: Pass Language/Mixins/declaring_constructor_t01: Pass Language/Expressions/Property_Extraction/Named_Constructor_Extraction/deferred_type_t01: Pass Language/Metadata/*: Skip # Uses dart:mirrors + +[ $runtime == dart_precompiled ] +LibTest/isolate/Isolate/spawnUri*: RuntimeError # Isolate.spawnUri \ No newline at end of file diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status index 2757d9ecc76..88b3ccd7e80 100644 --- a/tests/corelib/corelib.status +++ b/tests/corelib/corelib.status @@ -2,7 +2,7 @@ # 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. -[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] bool_from_environment2_test: Skip bool_from_environment_test: Skip from_environment_const_type_test: Skip @@ -14,18 +14,18 @@ string_from_environment2_test: Skip string_from_environment3_test: Skip string_from_environment_test: Skip -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] unicode_test: Fail # Bug 6706 compare_to2_test: Fail # Bug 4018 symbol_test/01: Fail, Pass # bug 11669 # #void should be a valid symbol. -[ $compiler == none || $compiler == dart2js ] +[ ($compiler == none || $compiler == precompiler) || $compiler == dart2js ] symbol_reserved_word_test/02: CompileTimeError # bug 20191 symbol_reserved_word_test/05: CompileTimeError # bug 20191 -[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] symbol_reserved_word_test/02: RuntimeError # bug 20191 / dartium/drt cannot detect CompileTimeErrors symbol_reserved_word_test/05: RuntimeError # bug 20191 / dartium/drt cannot detect CompileTimeErrors @@ -42,27 +42,27 @@ int_modulo_arith_test/modPow: RuntimeError # No bigints. # With the exception of 'void', const Symbol() should not accept reserved # words. -[ $compiler == none || $compiler == dart2js ] +[ ($compiler == none || $compiler == precompiler) || $compiler == dart2js ] symbol_reserved_word_test/04: MissingCompileTimeError # bug 11669, 19972 symbol_reserved_word_test/07: MissingCompileTimeError # bug 11669, 19972 symbol_reserved_word_test/10: MissingCompileTimeError # bug 11669, 19972 -[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] symbol_reserved_word_test/04: Fail # bug 11669, 19972 / dartium/drt cannot detect CompileTimeErrors symbol_reserved_word_test/07: Fail # bug 11669, 19972 / dartium/drt cannot detect CompileTimeErrors symbol_reserved_word_test/10: Fail # bug 11669, 19972 / dartium/drt cannot detect CompileTimeErrors # With the exception of 'void', new Symbol() should not accept reserved words. -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] symbol_reserved_word_test/06: RuntimeError # bug 11669 symbol_reserved_word_test/09: RuntimeError # bug 11669 symbol_reserved_word_test/12: RuntimeError # bug 11669 -[ $compiler == none && $runtime != dartium && $runtime != drt && $runtime != ContentShellOnAndroid ] +[ ($compiler == none || $compiler == precompiler) && $runtime != dartium && $runtime != drt && $runtime != ContentShellOnAndroid ] symbol_test/02: MissingCompileTimeError # bug 11669 symbol_test/03: MissingCompileTimeError # bug 11669 -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] symbol_test/none: Fail # bug 11669 symbol_operator_test/03: Fail # bug 11669 string_case_test/01: Fail # Bug 18061 @@ -70,10 +70,10 @@ string_case_test/01: Fail # Bug 18061 iterable_return_type_test/01: RuntimeError # Issue 13646 iterable_return_type_test/02: RuntimeError # Issue 13646 -[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] main_test: Fail # Dartium needs to check for both main() and main(args). -[ $compiler == none && $runtime == ContentShellOnAndroid ] +[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ] core_runtime_types_test: Pass, Fail # Issue 20525 [ $runtime == ff || $runtime == jsshell ] @@ -170,7 +170,7 @@ stopwatch_test: Skip # Flaky test due to expected performance behaviour. # The regexp tests are not verified to work on non d8/vm platforms yet. regexp/*: Skip -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] regexp/global_test: Skip # Timeout. Issue 21709 and 21708 [ $runtime != vm && $compiler != dart2analyzer] @@ -182,7 +182,7 @@ http_resource_test: Skip, OK # VM specific test, uses dart:io. [ $mode == debug ] regexp/pcre_test: Pass, Slow # Timeout. Issue 22008 -[ $runtime == vm && $arch == simarmv5te ] +[ ($runtime == vm || $runtime == dart_precompiled) && $arch == simarmv5te ] int_parse_radix_test/*: Pass, Slow big_integer_parsed_mul_div_vm_test: Pass, Slow @@ -211,7 +211,7 @@ symbol_test/none: RuntimeError # Please triage this failure. [ $compiler == dart2js && $cps_ir && $host_checked ] regexp/pcre_test: Crash # Stack Overflow -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] apply3_test: CompileTimeError # Imports dart:mirrors regexp/stack-overflow_test: RuntimeError, OK # Smaller limit with irregex interpreter big_integer_huge_mul_vm_test: Pass, Timeout # --no_intrinsify diff --git a/tests/html/html.status b/tests/html/html.status index faeaa01bb7d..1783cf0f9e6 100644 --- a/tests/html/html.status +++ b/tests/html/html.status @@ -382,7 +382,7 @@ mediasource_test/functional: RuntimeError # Issue 24838 # 'html' tests import the HTML library, so they only make sense in # a browser environment. -[ $runtime == vm ] +[ $runtime == vm || $runtime == dart_precompiled ] *: Skip [ $compiler == dart2js && ($runtime == drt || $runtime == ff) ] diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status index 04bb204cce2..297f24c49c6 100644 --- a/tests/isolate/isolate.status +++ b/tests/isolate/isolate.status @@ -2,17 +2,17 @@ # 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. -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] browser/*: SkipByDesign # Browser specific tests isolate_stress_test: Fail # Issue 12588: This should be able to pass when we have wrapper-less tests. [ $runtime != vm ] checked_test: Skip # Unsupported. -[ $runtime == vm && $arch == mips && $mode == debug ] +[ ($runtime == vm || $runtime == dart_precompiled) && $arch == mips && $mode == debug ] mandel_isolate_test: Skip # Uses 600 MB Ram on our 1 GB test device. -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] compile_time_error_test/01: Skip # Issue 12587 ping_test: Skip # Resolve test issues ping_pause_test: Skip # Resolve test issues @@ -20,7 +20,7 @@ kill3_test: Pass, Fail # Bad test: expects total message order message3_test/int32x4: Crash, Timeout # Issue 21818 -[ $compiler == none && $runtime == ContentShellOnAndroid ] +[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ] *: Skip # Isolate tests are timing out flakily on Android content_shell. Issue 19795 [ $compiler == dart2js && $runtime == safarimobilesim ] @@ -78,25 +78,25 @@ isolate_stress_test: Pass, Slow # Issue 10697 [ $compiler == dart2js && $runtime == chromeOnAndroid ] unresolved_ports_test: Pass, Timeout # Issue 15610 -[ $compiler == none && $runtime == drt ] +[ ($compiler == none || $compiler == precompiler) && $runtime == drt ] spawn_uri_nested_vm_test: Skip # Issue 14463 [ $jscl ] spawn_uri_multi_test/none: RuntimeError # Issue 13544 -[ $compiler == none && ($runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ] pause_test: Fail # Not implemented yet -[ $compiler == none && $runtime == ContentShellOnAndroid ] +[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ] nested_spawn2_test: Skip # Issue 19127: This test is timing out. -[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == ContentShellOnAndroid) ] spawn_uri_nested_vm_test: Skip # Issue 14479: This test is timing out. -[ $compiler == none && $runtime == dartium && $arch == x64 ] +[ ($compiler == none || $compiler == precompiler) && $runtime == dartium && $arch == x64 ] isolate/spawn_uri_multi_test/01: Skip # Times out. Issue 24795 -[ $compiler == none && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ] typed_message_test: Crash, Fail # Issue 13921, 14400 message_enum_test: Fail, OK # Issue 13921 Dom isolates don't support spawnFunction compile_time_error_test/none: Fail, OK # Issue 13921 Dom isolates don't support spawnFunction @@ -145,7 +145,7 @@ package_map_test: SkipByDesign # Uses Isolate.packageMap deferred_in_isolate2_test: RuntimeError # A.loadLibrary is not a function isolate_current_test: RuntimeError # Please triage this failure. -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] # Imports dart:mirrors count_test: CompileTimeError cross_isolate_message_test: CompileTimeError @@ -166,3 +166,19 @@ stacktrace_message_test: CompileTimeError stacktrace_message_test: CompileTimeError static_function_test: CompileTimeError unresolved_ports_test: CompileTimeError + +[ $runtime == dart_precompiled ] +deferred_in_isolate_test: Skip # Isolate.spawnUri +deferred_in_isolate2_test: Skip # Isolate.spawnUri +exit_at_spawnuri_test: Skip # Isolate.spawnUri +error_exit_at_spawnuri_test: Skip # Isolate.spawnUri +issue_24243_parent_isolate_test: Skip # Isolate.spawnUri +issue_21398_parent_isolate1_test: Skip # Isolate.spawnUri +spawn_uri_exported_main_test: Skip # Isolate.spawnUri +spawn_uri_test: Skip # Isolate.spawnUri +spawn_uri_nested_vm_test: Skip # Isolate.spawnUri +deferred_in_isolate_test: Skip # Isolate.spawnUri +spawn_uri_multi_test: Skip # Isolate.spawnUri +spawn_uri_vm_test: Skip # Isolate.spawnUri +issue_21398_parent_isolate_test: Skip # Isolate.spawnUri +error_at_spawnuri_test: Skip # Isolate.spawnUri diff --git a/tests/language/language.status b/tests/language/language.status index 79d88041fe6..c4d743140a7 100644 --- a/tests/language/language.status +++ b/tests/language/language.status @@ -5,7 +5,7 @@ # This directory contains tests that are intended to show the # current state of the language. -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] built_in_identifier_prefix_test: Fail # Issue 6970 tearoff_constructor_basic_test: Skip # Crashes in checked mode -- hausner investigating @@ -34,24 +34,24 @@ async_star_await_pauses_test: Skip # Times out. Issue 23996 # Unsupported configuration specific imports. config_import_test: Fail # Issue 24581 -[ $compiler == none && $runtime == vm ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) ] class_keyword_test/02: MissingCompileTimeError # Issue 13627 unicode_bom_test: Fail # Issue 16067 vm/debug_break_enabled_vm_test/01: Crash, OK # Expected to hit breakpoint. try_catch_optimized1_test: Skip # Srdjan investigating -[ $compiler == none && $checked ] +[ ($compiler == none || $compiler == precompiler) && $checked ] type_variable_bounds4_test/01: Fail # Issue 14006 -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] dynamic_prefix_core_test/01: RuntimeError # Issue 12478 multiline_strings_test: Fail # Issue 23020 -[ $compiler == none && ($runtime == vm || $runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && (($runtime == vm || $runtime == dart_precompiled) || $runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] dynamic_prefix_core_test/none: Fail # Issue 12478 export_ambiguous_main_negative_test: Fail # Issue 14763 -[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) && $unchecked ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == ContentShellOnAndroid) && $unchecked ] assertion_test: Fail # Issue 14651. generic_test: Fail # Issue 14651. list_literal4_test: Fail # Issue 14651. @@ -64,7 +64,7 @@ positional_parameters_type_test/02: Fail # Issue 14651. type_checks_in_factory_method_test: Fail # Issue 14651. vm/type_vm_test: Fail # Issue 14651. -[ $compiler == none && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ] issue13474_test: Pass, Fail # Issue 14651. vm/optimized_guarded_field_isolates_test: Fail # Issue 13921. main_test/01: Fail # Issue 20028 @@ -76,36 +76,36 @@ main_test/42: Fail # Issue 20028 mirror_in_static_init_test: Fail # Issue 22071 vm/debug_break_enabled_vm_test/*: Skip # Issue 14651. -[ $compiler == none && $runtime == dartium && $system == linux && $arch != x64 ] +[ ($compiler == none || $compiler == precompiler) && $runtime == dartium && $system == linux && $arch != x64 ] issue_22780_test/01 : Pass, Timeout # Issue 24473 -[ $compiler == none && $runtime == drt ] +[ ($compiler == none || $compiler == precompiler) && $runtime == drt ] disassemble_test: Pass, Fail # Issue 18122 -[ $compiler == none && $runtime == vm && $arch == mips && $checked ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && $arch == mips && $checked ] generic_instanceof3_test: Pass, Crash # Issue 17440. -[ $compiler == none && $runtime == vm && $arch == mips && $mode == debug ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && $arch == mips && $mode == debug ] stack_overflow_test: Skip # Crashes. Issue 17440. stack_overflow_stacktrace_test: Skip # Crashes. Issue 17440. large_class_declaration_test: SkipSlow # Times out. Issue 20352 -[ $compiler == none && ($runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) && $mode == debug ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) && $mode == debug ] large_class_declaration_test: SkipSlow # Times out. Issue 20352 -[ $compiler == none && $runtime == ContentShellOnAndroid ] +[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ] gc_test: SkipSlow # Times out flakily. Issue 20956 -[ $compiler == none && $runtime == vm && ( $arch == simarm || $arch == arm || $arch == simarmv5te || $arch == armv5te || $arch == simarm64 || $arch == arm64 || $arch == simmips || $arch == mips) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ( $arch == simarm || $arch == arm || $arch == simarmv5te || $arch == armv5te || $arch == simarm64 || $arch == arm64 || $arch == simmips || $arch == mips) ] vm/load_to_load_unaligned_forwarding_vm_test: Pass, Crash # Unaligned offset. Issue 22151 -[ $compiler == none && $runtime == dartium ] +[ ($compiler == none || $compiler == precompiler) && $runtime == dartium ] issue23244_test: Fail # Issue 23244 -[ $compiler == none && ($runtime == vm || $runtime == drt || $runtime == dartium) && $arch == ia32 ] +[ ($compiler == none || $compiler == precompiler) && (($runtime == vm || $runtime == dart_precompiled) || $runtime == drt || $runtime == dartium) && $arch == ia32 ] vm/regress_24517_test: Pass, Fail # Issue 24517. -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] # Imports dart:mirrors const_evaluation_test: CompileTimeError deferred_constraints_constants_test: CompileTimeError @@ -139,3 +139,9 @@ deopt_inlined_function_lazy_test: Pass, Crash # Incompatible flag: --deoptimize- tearoff_basic_test: RuntimeError, Crash # Conflicting flag. vm/type_cast_vm_test: RuntimeError # Line number mismatch. stack_trace_test: Fail # Issue 24783 - inlined frames missing + +[ $runtime == dart_precompiled ] +ct_const2_test: Pass, Crash # Incompatible flag --compile_all +hello_dart_test: Pass, Crash # Incompatible flag --compile_all + +implicit_closure_test: Pass, Crash # --use_slow_path diff --git a/tests/lib/lib.status b/tests/lib/lib.status index 8c17e5bcab7..5a8dcdb51bf 100644 --- a/tests/lib/lib.status +++ b/tests/lib/lib.status @@ -186,7 +186,7 @@ async/timer_not_available_test: Fail, OK # only meant to test when there is no w # 'js' tests import the dart:js library, so they only make sense in # a browser environment. -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] js/*: Skip [ $compiler == dart2js && $minified ] @@ -223,19 +223,19 @@ async/multiple_timer_test: Pass, Fail # Probably issue 14734 # TODO(efortuna): Investigate. async/timer_test: Fail, Pass -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] async/timer_not_available_test: Fail, OK mirrors/native_class_test: Fail, OK # This test is meant to run in a browser. mirrors/deferred_type_test: CompileTimeError, OK # Don't have a multitest marker for dynamic compile time errors. -[ $compiler == none ] +[ ($compiler == none || $compiler == precompiler) ] async/timer_not_available_test: SkipByDesign # only meant to test when there is no way to implement timer (currently only in d8) mirrors/symbol_validation_test: RuntimeError # Issue 13596 mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation. -[ $compiler == none && ( $runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ( $runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] async/schedule_microtask6_test: Fail # Issue 10910 async/timer_test: Fail, Pass # Issue 15487 async/multiple_timer_test: Fail, Pass # Issue 15487 @@ -248,14 +248,14 @@ mirrors/spawn_function_root_library_test: SkipByDesign # Uses spawnFunction. mirrors/local_isolate_test: RuntimeError # Issue 12188 mirrors/deferred_type_test: RuntimeError, OK # Should be CompileTimeError. Issue 22072 -[ $compiler == none && $runtime == drt && $system == windows ] +[ ($compiler == none || $compiler == precompiler) && $runtime == drt && $system == windows ] async/multiple_timer_test: Fail, Pass # See Issue 10982 async/timer_test: Fail, Pass # See Issue 10982 -[ $compiler == none && $runtime == drt && $checked ] +[ ($compiler == none || $compiler == precompiler) && $runtime == drt && $checked ] async/slow_consumer_test: Fail, Pass # Dartium JsInterop failure, dartbug.com/24460 -[$compiler == none && $runtime == ContentShellOnAndroid ] +[($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ] async/stream_timeout_test: RuntimeError, Pass # Issue 19127 async/slow_consumer3_test: SkipSlow # Times out flakily. Issue 20956 async/slow_consumer2_test: SkipSlow # Times out flakily. Issue 20956 @@ -305,7 +305,7 @@ mirrors/*deferred*: Skip # Issue 17458 [ $compiler == dart2js && $mode == debug ] mirrors/native_class_test: Pass, Slow -[ $compiler == none && $arch == mips ] +[ ($compiler == none || $compiler == precompiler) && $arch == mips ] async/timer_regress22626_test: Pass, RuntimeError # Issue 22626 [ $arch == simarm || $arch == simarmv5te ] @@ -325,16 +325,16 @@ convert/utf85_test: Skip # Pass, Slow Issue 20111. [ $mode == debug && $arch == ia32 && $system == windows ] convert/streamed_conversion_json_utf8_decode_test: Skip # Verification OOM. -[ $runtime == vm && $mode == debug && $arch == x64 && $system == windows ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $arch == x64 && $system == windows ] convert/streamed_conversion_json_utf8_decode_test: Pass, Slow -[ $runtime == vm && $mode == release && $arch == ia32 && $system == windows ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == release && $arch == ia32 && $system == windows ] convert/json_test: RuntimeError # Issue 24908 [ $mode == debug && $arch != ia32 && $arch != x64 && $arch != simarm && $arch != simarmv5te ] convert/streamed_conversion_json_utf8_decode_test: Skip # Verification not yet implemented. -[ $runtime == vm && $mode == debug && $builder_tag == asan ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $builder_tag == asan ] mirrors/immutable_collections_test: SkipSlow # Timeout. convert/streamed_conversion_json_utf8_decode_test: Skip # Timeout. @@ -357,7 +357,7 @@ mirrors/typedef_library_test: Crash # Assertion failure: typedef(G) has not been [ $compiler != dart2js ] async/dart2js_uncaught_error_test: Skip # JS-integration only test -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] mirrors/*: SkipByDesign convert/chunked_conversion_utf88_test: Pass, Timeout convert/utf85_test: Pass, Timeout diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status index 241086a806a..0503bc3dbe2 100644 --- a/tests/standalone/standalone.status +++ b/tests/standalone/standalone.status @@ -17,15 +17,15 @@ issue14236_test: Pass # Do not remove this line. It serves as a marker for Issue javascript_compatibility_errors_test/none: Fail, OK # Not possible to exclude or annotate with '/// none:' -[ $runtime != vm && ($runtime != drt || $compiler != none)) ] +[ ($runtime != vm && $runtime != dart_precompiled) && ($runtime != drt || $compiler != none)) ] no_assert_test: Fail, OK # This is testing a vm flag. -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] package/package_isolate_test: Fail # Issue 12474 io/observatory_test: Fail package/scenarios/invalid/same_package_twice_test: Pass # Issue 24119 -[ $runtime == vm && $checked ] +[ ($runtime == vm || $runtime == dart_precompiled) && $checked ] # These tests have type errors on purpose. io/process_invalid_arguments_test: Fail, OK io/directory_invalid_arguments_test: Fail, OK @@ -38,13 +38,13 @@ io/stdout_bad_argument_test: Fail, OK io/file_fuzz_test: Skip io/directory_fuzz_test: Skip -[ $runtime == vm && $system == macos ] +[ ($runtime == vm || $runtime == dart_precompiled) && $system == macos ] # This test fails with "Too many open files" on the Mac OS buildbot. # This is expected as MacOS by default runs with a very low number # of allowed open files ('ulimit -n' says something like 256). io/socket_many_connections_test: Skip -[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ] typed_array_test: Fail # Issue 13921 typed_array_int64_uint64_test: Fail # Issue 13921 typed_data_isolate_test: SkipByDesign # This test uses dart:io @@ -157,10 +157,10 @@ io/test_runner_test: Skip # Flakily times out in a subtest. Issue 201351 full_coverage_test: SkipSlow # Times out. Issue 20352 io/http_client_stays_alive_test: Skip # Timing dependent test, MIPS machine too slow. -[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) && $unchecked ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == ContentShellOnAndroid) && $unchecked ] assert_test: Fail # Issue 14651. -[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) ] +[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == ContentShellOnAndroid) ] javascript_int_overflow_literal_test/01: Fail # Issue 14651. javascript_int_overflow_test: Fail # Issue 14651. @@ -205,19 +205,62 @@ io/process_sync_test: Pass, Timeout # Issue 24596 [ $arch != ia32 && $arch != x64 && $arch != simarm && $arch != simarmv5te && $mode == debug ] verified_mem_test: Skip # Not yet implemented. -[ $runtime == vm && $mode == debug && $builder_tag == asan ] +[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $builder_tag == asan ] full_coverage_test: Skip # Timeout. io/file_lock_test: Skip # Timeout. io/test_runner_test: Skip # Timeout. io/http_client_stays_alive_test: Skip # Timeout. -[ $runtime == vm ] +[ ($runtime == vm || $runtime == dart_precompiled) ] # Failures in secure networking while NSS is replaced with BoringSSL io/https_client_certificate_test: RuntimeError # Issue 24070 io/secure_socket_renegotiate_test: RuntimeError io/secure_socket_bad_data_test: RuntimeError # An error in a secure connection just puts a READ_CLOSED on the stream, rather than signaling an error on the stream. -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] map_literal_oom_test: Pass, Crash # Issue 24678 javascript*: SkipByDesign # JS overflow flag unsupported io/web_socket_test: Pass, RuntimeError # Issue 24674 + +[ $runtime == dart_precompiled ] +debugger/*: Skip +noopt_test: Skip +precompilation_dart2js_test: Skip + +full_coverage_test: RuntimeError # Platform.executable +http_launch_test: RuntimeError # Platform.executable +io/addlatexhash_test: RuntimeError # Platform.executable +io/compile_all_test: Crash # Incompatible flag --compile_all +io/file_read_special_device_test: RuntimeError # Platform.executable +io/file_stream_test: RuntimeError # Platform.executable +io/file_test: RuntimeError # Platform.executable +io/http_cross_process_test: RuntimeError # Platform.executable +io/https_unauthorized_test: RuntimeError # Platform.executable +io/platform_resolved_executable_test: RuntimeError # Platform.resolvedExecutable +io/skipping_dart2js_compilations_test: RuntimeError # Platform.executable +io/snapshot_fail_test: RuntimeError # Platform.executable +io/stdin_sync_test: RuntimeError # Platform.executable +io/test_extension_fail_test: RuntimeError # Platform.executable +precompilation_test: RuntimeError # Platform.executable +standalone/io/file_read_special_device_test: RuntimeError # Platform.executable +verbose_gc_to_bmu_test: RuntimeError # Platform.executable +io/http_server_close_response_after_error_test: RuntimeError # Platform.executable +io/http_client_stays_alive_test: RuntimeError # Platform.executable +io/print_sync_test: RuntimeError # Platform.executable +io/signals_test: RuntimeError # Platform.executable +io/stdio_nonblocking_test: RuntimeError # Platform.executable +io/regress_7191_test: RuntimeError # Platform.executable +io/secure_unauthorized_test: RuntimeError # Platform.executable +io/dart_std_io_pipe_test: RuntimeError # Platform.executable +io/platform_test: RuntimeError # Platform.executable +io/socket_cross_process_test: RuntimeError # Platform.executable +io/test_runner_test: RuntimeError # Platform.executable +io/file_lock_test: RuntimeError # Platform.executable +io/code_collection_test: RuntimeError # Platform.executable +io/file_lock_test: RuntimeError # Platform.executable +io/code_collection_test: RuntimeError # Platform.executable +io/raw_socket_cross_process_test: RuntimeError # Platform.executable +io/test_extension_test: RuntimeError # Platform.executable +io/regress_7679_test: RuntimeError # Platform.executable + +io/process_*: Skip # Most use Platform.executable \ No newline at end of file diff --git a/tests/utils/utils.status b/tests/utils/utils.status index 1f6c5205bf5..bf69360d0f7 100644 --- a/tests/utils/utils.status +++ b/tests/utils/utils.status @@ -13,14 +13,14 @@ source_mirrors_test: Slow, Pass [ $compiler == dart2js && $browser ] *: Skip -[ $compiler == none && $runtime != vm ] +[ ($compiler == none || $compiler == precompiler) && $runtime != vm ] dart2js_test: SkipByDesign # Uses dart:io. [ $compiler == dart2js && $mode == debug ] dummy_compiler_test: Slow, Pass -[ $compiler == none && $runtime == ContentShellOnAndroid ] +[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ] dummy_compiler_test: Pass, RuntimeError # Issue 17662 recursive_import_test: Pass, RuntimeError # Issue 17662 source_mirrors_test: Pass, RuntimeError # Issue 17662 @@ -30,5 +30,5 @@ dummy_compiler_test: Crash # (switch (function.na... continue to a labeled swit recursive_import_test: Crash # (switch (function.na... continue to a labeled switch case source_mirrors_test: Crash, Slow # (switch (function.na... continue to a labeled switch case -[ $noopt ] +[ ($noopt || $compiler == precompiler) ] source_mirrors_test: SkipByDesign # Imports dart:mirrors diff --git a/tools/precompilation/precompiler.dart b/tools/precompilation/precompiler.dart new file mode 100755 index 00000000000..419875a449e --- /dev/null +++ b/tools/precompilation/precompiler.dart @@ -0,0 +1,64 @@ +// Copyright (c) 2015, 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. + +library precompiler; + +import 'dart:io'; + +void run(String executable, String arguments, [String workingDirectory]) { + print("+ $executable ${arguments.join(' ')}"); + var result = Process.runSync(executable, arguments, + workingDirectory: workingDirectory); + stdout.write(result.stdout); + stderr.write(result.stderr); + if (result.exitCode != 0) { + exit(result.exitCode); + } +} + +void main(List args) { + var configuration = Platform.environment["DART_CONFIGURATION"]; + + var cc, cc_flags, shared, libname; + if (Platform.isLinux) { + cc = 'gcc'; + shared = '-shared'; + libname = 'libprecompiled.so'; + } else if (Platform.isMacOS) { + cc = 'clang'; + shared = '-dynamiclib'; + libname = 'libprecompiled.dylib'; + } else { + print("Test only supports Linux and Mac"); + return; + } + + if (configuration.endsWith("X64")) { + cc_flags = "-m64"; + } else if (configuration.endsWith("SIMARM64")) { + cc_flags = "-m64"; + } else if (configuration.endsWith("SIMARM")) { + cc_flags = "-m32"; + } else if (configuration.endsWith("SIMMIPS")) { + cc_flags = "-m32"; + } else if (configuration.endsWith("ARM")) { + cc_flags = ""; + } else if (configuration.endsWith("MIPS")) { + cc_flags = "-EL"; + } else { + print("Architecture not supported: $configuration"); + return; + } + + var tmpDir; + for (var arg in args) { + if (arg.startsWith("--gen-precompiled-snapshot")) { + tmpDir = arg.substring("--gen-precompiled-snapshot".length + 1); + } + } + print("Using directory $tmpDir"); + + run(args[0], args.sublist(1)); + run(cc, [shared, cc_flags, "-o", libname, "precompiled.S"], tmpDir); +} diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart index e901344c3ed..a89aad5659e 100644 --- a/tools/testing/dart/compiler_configuration.dart +++ b/tools/testing/dart/compiler_configuration.dart @@ -74,6 +74,9 @@ abstract class CompilerConfiguration { isHostChecked: isHostChecked, useCps: useCps, useSdk: useSdk, isCsp: isCsp, extraDart2jsOptions: TestUtils.getExtraOptions(configuration, 'dart2js_options')); + case 'precompiler': + return new PrecompilerCompilerConfiguration( + isDebug: isDebug, isChecked: isChecked); case 'none': return new NoneCompilerConfiguration( isDebug: isDebug, isChecked: isChecked, @@ -119,6 +122,12 @@ abstract class CompilerConfiguration { return new CommandArtifact([], null, null); } + List computeCompilerArguments(vmOptions, sharedOptions, args) { + return new List() + ..addAll(sharedOptions) + ..addAll(args); + } + List computeRuntimeArguments( RuntimeConfiguration runtimeConfiguration, String buildDir, @@ -294,6 +303,92 @@ class Dart2jsCompilerConfiguration extends Dart2xCompilerConfiguration { } } + +class PrecompilerCompilerConfiguration extends CompilerConfiguration { + PrecompilerCompilerConfiguration({ + bool isDebug, + bool isChecked}) + : super._subclass(isDebug: isDebug, isChecked: isChecked); + + int computeTimeoutMultiplier() { + int multiplier = 2; + if (isDebug) multiplier *= 4; + if (isChecked) multiplier *= 2; + return multiplier; + } + + CommandArtifact computeCompilationArtifact( + String buildDir, + String tempDir, + CommandBuilder commandBuilder, + List arguments, + Map environmentOverrides) { + return new CommandArtifact( + [ + this.computeCompilationCommand( + tempDir, + buildDir, + CommandBuilder.instance, + arguments, + environmentOverrides)], + '$tempDir', + 'application/dart-precompiled'); + } + + CompilationCommand computeCompilationCommand( + String tempDir, + String buildDir, + CommandBuilder commandBuilder, + List arguments, + Map environmentOverrides) { + var exec = "$buildDir/dart"; + var args = new List(); + args.add("tools/precompilation/precompiler.dart"); + args.add("$buildDir/dart_no_snapshot"); + args.add("--gen-precompiled-snapshot=$tempDir"); + args.addAll(arguments); + + return commandBuilder.getCompilationCommand( + 'precompiler.dart', tempDir, !useSdk, + bootstrapDependencies(buildDir), + exec, args, environmentOverrides); + } + + List computeCompilerArguments(vmOptions, + sharedOptions, + originalArguments) { + List args = []; + if (isChecked) { + args.add('--enable_asserts'); + args.add('--enable_type_checks'); + } + return args + ..addAll(vmOptions) + ..addAll(sharedOptions) + ..addAll(originalArguments); + } + + List computeRuntimeArguments( + RuntimeConfiguration runtimeConfiguration, + String buildDir, + TestInformation info, + List vmOptions, + List sharedOptions, + List originalArguments, + CommandArtifact artifact) { + List args = []; + if (isChecked) { + args.add('--enable_asserts'); + args.add('--enable_type_checks'); + } + return args + ..addAll(vmOptions) + ..addAll(sharedOptions) + ..addAll(originalArguments); + } +} + + class AnalyzerCompilerConfiguration extends CompilerConfiguration { AnalyzerCompilerConfiguration( {bool isDebug, diff --git a/tools/testing/dart/runtime_configuration.dart b/tools/testing/dart/runtime_configuration.dart index 1fbf54dc409..55810eb863c 100644 --- a/tools/testing/dart/runtime_configuration.dart +++ b/tools/testing/dart/runtime_configuration.dart @@ -52,6 +52,9 @@ class RuntimeConfiguration { case 'vm': return new StandaloneDartRuntimeConfiguration(); + case 'dart_precompiled': + return new DartPrecompiledRuntimeConfiguration(); + case 'drt': return new DrtRuntimeConfiguration(); @@ -218,6 +221,32 @@ class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { } } + +class DartPrecompiledRuntimeConfiguration extends DartVmRuntimeConfiguration { + List computeRuntimeCommands( + TestSuite suite, + CommandBuilder commandBuilder, + CommandArtifact artifact, + List arguments, + Map environmentOverrides) { + String script = artifact.filename; + String type = artifact.mimeType; + if (script != null && type != 'application/dart-precompiled') { + throw "dart_precompiled cannot run files of type '$type'."; + } + + var augmentedArgs = new List(); + augmentedArgs.add("--run-precompiled-snapshot=${artifact.filename}"); + augmentedArgs.addAll(arguments); + + var augmentedEnv = new Map.from(environmentOverrides); + augmentedEnv['LD_LIBRARY_PATH'] = artifact.filename; + + return [commandBuilder.getVmCommand( + suite.dartPrecompiledBinaryFileName, augmentedArgs, augmentedEnv)]; + } +} + /// Temporary runtime configuration for browser runtimes that haven't been /// migrated yet. // TODO(ahe): Remove this class. diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart index a376f28270f..92514fe97e7 100644 --- a/tools/testing/dart/test_options.dart +++ b/tools/testing/dart/test_options.dart @@ -67,7 +67,7 @@ class TestOptionsParser { dart2analyzer: Perform static analysis on Dart code by running the analyzer (only valid with the following runtimes: none)''', ['-c', '--compiler'], - ['none', 'dart2js', 'dart2analyzer'], + ['none', 'precompiler', 'dart2js', 'dart2analyzer'], 'none'), // TODO(antonm): fix the option drt. new _TestOptionSpecification( @@ -75,6 +75,9 @@ class TestOptionsParser { '''Where the tests should be run. vm: Run Dart code on the standalone dart vm. + dart_precompiled: Run a precompiled snapshot on a variant of the standalone + dart vm lacking a JIT. + d8: Run JavaScript from the command line using v8. jsshell: Run JavaScript from the command line using firefox js-shell. @@ -95,7 +98,8 @@ class TestOptionsParser { none: No runtime, compile only (for example, used for dart2analyzer static analysis tests).''', ['-r', '--runtime'], - ['vm', 'd8', 'jsshell', 'drt', 'dartium', 'ff', 'firefox', + ['vm', 'dart_precompiled', 'd8', 'jsshell', 'drt', 'dartium', + 'ff', 'firefox', 'chrome', 'safari', 'ie9', 'ie10', 'ie11', 'opera', 'chromeOnAndroid', 'safarimobilesim', 'ContentShellOnAndroid', 'DartiumOnAndroid', 'none'], @@ -644,6 +648,9 @@ Note: currently only implemented for dart2js.''', case 'dart2analyzer': validRuntimes = const ['none']; break; + case 'precompiler': + validRuntimes = const ['dart_precompiled']; + break; case 'none': validRuntimes = const ['vm', 'drt', 'dartium', 'ContentShellOnAndroid', 'DartiumOnAndroid']; diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart index eeb1d6931c1..ffd99217056 100644 --- a/tools/testing/dart/test_runner.dart +++ b/tools/testing/dart/test_runner.dart @@ -1679,6 +1679,10 @@ CommandOutput createCommandOutput(Command command, return new VmCommandOutputImpl( command, exitCode, timedOut, stdout, stderr, time, pid); } else if (command is CompilationCommand) { + if (command.displayName == 'precompiler.dart') { + return new VmCommandOutputImpl( + command, exitCode, timedOut, stdout, stderr, time, pid); + } return new CompilationCommandOutputImpl( command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); } else if (command is JSCommandlineCommand) { diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart index bec08a890d6..66b6a1e54f3 100644 --- a/tools/testing/dart/test_suite.dart +++ b/tools/testing/dart/test_suite.dart @@ -212,6 +212,19 @@ abstract class TestSuite { return dartExecutable; } + String get dartPrecompiledBinaryFileName { + // Controlled by user with the option "--dart_precompiled". + String dartExecutable = configuration['dart_precompiled']; + + if (dartExecutable == null || dartExecutable == '') { + String suffix = executableBinarySuffix; + dartExecutable = '$buildDir/dart_precompiled$suffix'; + } + + TestUtils.ensureExists(dartExecutable, configuration); + return dartExecutable; + } + String get d8FileName { var suffix = getExecutableSuffix('d8'); var d8Dir = TestUtils.dartDir.append('third_party/d8'); @@ -1009,9 +1022,10 @@ class StandardTestSuite extends TestSuite { List compileTimeArguments = []; String tempDir; if (compilerConfiguration.hasCompiler) { - compileTimeArguments - ..addAll(sharedOptions) - ..addAll(args); + compileTimeArguments = + compilerConfiguration.computeCompilerArguments(vmOptions, + sharedOptions, + args); // Avoid doing this for analyzer. tempDir = createCompilationOutputDirectory(info.filePath); } @@ -1772,8 +1786,8 @@ class StandardTestSuite extends TestSuite { } List> getVmOptions(Map optionsFromFile) { - var COMPILERS = const ['none']; - var RUNTIMES = const ['none', 'vm', 'drt', 'dartium', + var COMPILERS = const ['none', 'precompiler']; + var RUNTIMES = const ['none', 'dart_precompiled', 'vm', 'drt', 'dartium', 'ContentShellOnAndroid', 'DartiumOnAndroid']; var needsVmOptions = COMPILERS.contains(configuration['compiler']) && RUNTIMES.contains(configuration['runtime']);