Disallow deferred loading when using isolate reloading.

Update status files.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2144113002 .
This commit is contained in:
Todd Turnidge 2016-07-13 15:25:06 -07:00
parent 05c1eac65d
commit 77b99396e8
8 changed files with 131 additions and 55 deletions

View file

@ -1299,10 +1299,16 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) {
DeoptimizeFunctionsOnStack();
}
if (do_reload) {
#ifndef PRODUCT
// Maybe adjust the rate of future reloads.
isolate->MaybeIncreaseReloadEveryNStackOverflowChecks();
// Issue a reload.
NOT_IN_PRODUCT(isolate->ReloadSources();)
isolate->ReloadSources();
const Error& error = Error::Handle(isolate->sticky_reload_error());
if (!error.IsNull()) {
FATAL1("*** Isolate reload failed: %s\n", error.ToErrorCString());
}
#endif
}
if (FLAG_support_debugger && do_stacktrace) {
String& var_name = String::Handle();

View file

@ -727,24 +727,47 @@ bool IsolateReloadContext::ValidateReload() {
return false;
}
// Already built.
ASSERT(class_map_storage_ != Array::null());
UnorderedHashMap<ClassMapTraits> map(class_map_storage_);
UnorderedHashMap<ClassMapTraits>::Iterator it(&map);
Class& cls = Class::Handle();
Class& new_cls = Class::Handle();
while (it.MoveNext()) {
const intptr_t entry = it.Current();
new_cls = Class::RawCast(map.GetKey(entry));
cls = Class::RawCast(map.GetPayload(entry, 0));
if (new_cls.raw() != cls.raw()) {
if (!cls.CanReload(new_cls)) {
map.Release();
return false;
// Validate libraries.
{
ASSERT(library_map_storage_ != Array::null());
UnorderedHashMap<LibraryMapTraits> map(library_map_storage_);
UnorderedHashMap<LibraryMapTraits>::Iterator it(&map);
Library& lib = Library::Handle();
Library& new_lib = Library::Handle();
while (it.MoveNext()) {
const intptr_t entry = it.Current();
new_lib = Library::RawCast(map.GetKey(entry));
lib = Library::RawCast(map.GetPayload(entry, 0));
if (new_lib.raw() != lib.raw()) {
if (!lib.CanReload(new_lib)) {
map.Release();
return false;
}
}
}
map.Release();
}
// Validate classes.
{
ASSERT(class_map_storage_ != Array::null());
UnorderedHashMap<ClassMapTraits> map(class_map_storage_);
UnorderedHashMap<ClassMapTraits>::Iterator it(&map);
Class& cls = Class::Handle();
Class& new_cls = Class::Handle();
while (it.MoveNext()) {
const intptr_t entry = it.Current();
new_cls = Class::RawCast(map.GetKey(entry));
cls = Class::RawCast(map.GetPayload(entry, 0));
if (new_cls.raw() != cls.raw()) {
if (!cls.CanReload(new_cls)) {
map.Release();
return false;
}
}
}
map.Release();
}
map.Release();
return true;
}

View file

@ -527,6 +527,22 @@ bool Class::CanReload(const Class& replacement) const {
bool Library::CanReload(const Library& replacement) const {
// TODO(26878): If the replacement library uses deferred loading,
// reject it. We do not yet support reloading deferred libraries.
LibraryPrefix& prefix = LibraryPrefix::Handle();
LibraryPrefixIterator it(replacement);
while (it.HasNext()) {
prefix = it.GetNext();
if (prefix.is_deferred_load()) {
const String& lib_url = String::Handle(replacement.url());
const String& prefix_name = String::Handle(prefix.name());
IRC->ReportError(String::Handle(String::NewFormatted(
"Reloading support for deferred loading has not yet been implemented:"
" library '%s' has deferred import '%s'",
lib_url.ToCString(), prefix_name.ToCString())));
return false;
}
}
return true;
}

View file

@ -194,7 +194,32 @@ Language/Expressions/Object_Identity/double_t02: RuntimeError # Issue #26374
LibTest/typed_data/Float32x4/operator_division_A01_t02: RuntimeError # Issue #26675
[ $hot_reload ]
LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: SkipByDesign # Requires deferred libraries
Language/Expressions/Assignment/prefix_object_t02: Crash # Requires deferred libraries
Language/Expressions/Constants/constant_constructor_t03: Crash # Requires deferred libraries
Language/Expressions/Constants/identifier_denotes_a_constant_t06: Crash # Requires deferred libraries
Language/Expressions/Constants/identifier_denotes_a_constant_t07: Crash # Requires deferred libraries
Language/Expressions/Constants/static_constant_t06: Crash # Requires deferred libraries
Language/Expressions/Constants/static_constant_t07: Crash # Requires deferred libraries
Language/Expressions/Constants/top_level_function_t04: Crash # Requires deferred libraries
Language/Expressions/Constants/top_level_function_t05: Crash # Requires deferred libraries
Language/Expressions/Instance_Creation/Const/deferred_type_t01: Crash # Requires deferred libraries
Language/Expressions/Instance_Creation/Const/deferred_type_t02: Crash # Requires deferred libraries
Language/Expressions/Instance_Creation/New/evaluation_t19: Crash # Requires deferred libraries
Language/Expressions/Instance_Creation/New/evaluation_t20: Crash # Requires deferred libraries
Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t03: SkipByDesign # Relies on closure identity
Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/deferred_type_t01: Crash # Requires deferred libraries
Language/Expressions/Property_Extraction/Named_Constructor_Extraction/deferred_type_t01: Crash # Requires deferred libraries
Language/Expressions/Type_Cast/evaluation_t10: Crash # Requires deferred libraries
Language/Expressions/Type_Test/evaluation_t10: Crash # Requires deferred libraries
Language/Libraries_and_Scripts/Imports/deferred_import_t01: Crash # Requires deferred libraries
Language/Libraries_and_Scripts/Imports/deferred_import_t02: Crash # Requires deferred libraries
Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01: Crash # Requires deferred libraries
Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: Crash # Requires deferred libraries
Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t03: Crash # Requires deferred libraries
Language/Libraries_and_Scripts/Imports/static_type_t01: Crash # Requires deferred libraries
Language/Types/Dynamic_Type_System/deferred_type_error_t01: Crash # Requires deferred libraries
Language/Types/Static_Types/deferred_type_t01: Crash # Requires deferred libraries
LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Crash # Requires deferred libraries
LibTest/collection/ListBase/ListBase_class_A01_t01: Pass, Timeout
LibTest/collection/ListBase/ListBase_class_A01_t02: Pass, Timeout
LibTest/collection/ListMixin/ListMixin_class_A01_t01: Pass, Timeout
@ -203,4 +228,3 @@ LibTest/core/List/List_class_A01_t02: Pass, Timeout
LibTest/core/Map/Map_class_A01_t04: Pass, Timeout
LibTest/core/Uri/Uri_A06_t03: Pass, Timeout
LibTest/core/Uri/encodeQueryComponent_A01_t02: Pass, Timeout
Language/Libraries_and_Scripts/Imports/deferred_import_t02: SkipByDesign # Requires deferred libraries

View file

@ -209,8 +209,8 @@ issue_24243_parent_isolate_test: Skip # Requires checked mode
*: Skip # Issue #26373
[ $hot_reload ]
deferred_in_isolate_test: SkipByDesign # Requires deferred libraries
deferred_in_isolate2_test: SkipByDesign # Requires deferred libraries
deferred_in_isolate_test: Crash # Requires deferred libraries
deferred_in_isolate2_test: Crash # Requires deferred libraries
function_send_test: SkipByDesign # Closure identity
issue_21398_parent_isolate2_test: SkipByDesign # Requires deferred libraries
issue_21398_parent_isolate2_test: Crash # Requires deferred libraries
message3_test/fun: SkipByDesign # Closure identity

View file

@ -250,31 +250,37 @@ issue23244_test: Skip # Issue #26373
[ $hot_reload ]
bound_closure_equality_test: SkipByDesign # Closure identity
cha_deopt1_test: SkipByDesign # Requires deferred libraries
cha_deopt2_test: SkipByDesign # Requires deferred libraries
cha_deopt3_test: SkipByDesign # Requires deferred libraries
deferred_closurize_load_library_test: SkipByDesign # Requires deferred libraries
deferred_constant_list_test: SkipByDesign # Requires deferred libraries
deferred_constraints_constants_test: SkipByDesign # Requires deferred libraries
deferred_constraints_type_annotation_test: SkipByDesign # Requires deferred libraries
deferred_function_type_test: SkipByDesign # Requires deferred libraries
deferred_global_test: SkipByDesign # Requires deferred libraries
deferred_load_constants_test: SkipByDesign # Requires deferred libraries
deferred_load_inval_code_test: SkipByDesign # Requires deferred libraries
deferred_mixin_test: SkipByDesign # Requires deferred libraries
deferred_no_such_method_test: SkipByDesign # Requires deferred libraries
deferred_only_constant_test: SkipByDesign # Requires deferred libraries
deferred_optimized_test: SkipByDesign # Requires deferred libraries
deferred_redirecting_factory_test: SkipByDesign # Requires deferred libraries
deferred_regression_22995_test: SkipByDesign # Requires deferred libraries
deferred_shadow_load_library_test: SkipByDesign # Requires deferred libraries
deferred_shared_and_unshared_classes_test: SkipByDesign # Requires deferred libraries
deferred_static_seperate_test: SkipByDesign # Requires deferred libraries
deferred_super_dependency_test: SkipByDesign # Requires deferred libraries
deferred_type_dependency_test: SkipByDesign # Requires deferred libraries
issue_1751477_test: SkipByDesign # Requires deferred libraries
cha_deopt1_test: Crash # Requires deferred libraries
cha_deopt2_test: Crash # Requires deferred libraries
cha_deopt3_test: Crash # Requires deferred libraries
deferred_call_empty_before_load_test: Crash # Requires deferred libraries
deferred_closurize_load_library_test: Crash # Requires deferred libraries
deferred_constant_list_test: Crash # Requires deferred libraries
deferred_constraints_constants_test: Crash # Requires deferred libraries
deferred_constraints_type_annotation_test: Crash # Requires deferred libraries
deferred_function_type_test: Crash # Requires deferred libraries
deferred_global_test: Crash # Requires deferred libraries
deferred_import_core_test: Crash # Requires deferred libraries
deferred_inlined_test: Crash # Requires deferred libraries
deferred_inheritance_constraints_test: Crash # Requires deferred libraries
deferred_load_constants_test: Crash # Requires deferred libraries
deferred_load_inval_code_test: Crash # Requires deferred libraries
deferred_load_library_wrong_args_test: Crash # Requires deferred libraries
deferred_mixin_test: Crash # Requires deferred libraries
deferred_no_such_method_test: Crash # Requires deferred libraries
deferred_not_loaded_check_test: Crash # Requires deferred libraries
deferred_only_constant_test: Crash # Requires deferred libraries
deferred_optimized_test: Crash # Requires deferred libraries
deferred_redirecting_factory_test: Crash # Requires deferred libraries
deferred_regression_22995_test: Crash # Requires deferred libraries
deferred_shadow_load_library_test: Crash # Requires deferred libraries
deferred_shared_and_unshared_classes_test: Crash # Requires deferred libraries
deferred_static_seperate_test: Crash # Requires deferred libraries
deferred_super_dependency_test: Pass, Crash # Requires deferred libraries
deferred_type_dependency_test: Crash # Requires deferred libraries
issue_1751477_test: Crash # Requires deferred libraries
issue23244_test: Fail # Issue 26877
regress_23408_test: SkipByDesign # Requires deferred libraries
regress_22443_test: SkipByDesign # Requires deferred libraries
tearoff_basic_test: SkipByDesign # Requires deferred libraries
regress_23408_test: Crash # Requires deferred libraries
regress_22443_test: Crash # Requires deferred libraries
tearoff_basic_test: Crash # Requires deferred libraries
static_closure_identical_test: SkipByDesign # Closure identity

View file

@ -389,12 +389,13 @@ mirrors/generic_bounded_test/02: Fail # Type equality - Issue 26869
mirrors/generic_bounded_by_type_parameter_test/02: Fail # Type equality - Issue 26869
mirrors/typedef_reflected_type_test/01: Fail # Type equality - Issue 26869
mirrors/library_enumeration_deferred_loading_test: Fail # Deferred loading
mirrors/library_import_deferred_loading_test: Fail # Deferred loading
mirrors/typedef_deferred_library_test: Fail # Deferred loading
mirrors/deferred_mirrors_update_test: Fail # Deferred loading
mirrors/deferred_mirrors_metadata_test: Fail # Deferred loading
mirrors/deferred_mirrors_metatarget_test: Crash, Fail # Deferred loading
mirrors/load_library_test: Fail # Deferred loading
mirrors/library_enumeration_deferred_loading_test: Crash # Deferred loading
mirrors/library_imports_deferred_test: Crash # Deferred loading
mirrors/library_import_deferred_loading_test: Crash # Deferred loading
mirrors/typedef_deferred_library_test: Crash # Deferred loading
mirrors/deferred_mirrors_update_test: Crash # Deferred loading
mirrors/deferred_mirrors_metadata_test: Crash # Deferred loading
mirrors/deferred_mirrors_metatarget_test: Crash # Deferred loading
mirrors/load_library_test: Crash # Deferred loading
mirrors/metadata_scope_test/none: Fail # Constant equality - Issue 26868

View file

@ -323,7 +323,7 @@ out_of_memory_test: Skip # Issue #26377
deferred_transitive_import_error_test: Skip # Contains intentional errors.
[ $hot_reload ]
deferred_transitive_import_error_test: SkipByDesign # Uses deferred imports.
deferred_transitive_import_error_test: Crash # Uses deferred imports.
package/*: SkipByDesign # Launches VMs in interesting ways.
[ $builder_tag == no_ipv6 ]