diff options
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 11 | ||||
| -rw-r--r-- | runtime/oat_file.cc | 10 |
2 files changed, 14 insertions, 7 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 0039be0fde..f52c566727 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -1231,8 +1231,15 @@ class ClinitImageUpdate { bool operator()(ObjPtr<mirror::Class> klass) override REQUIRES_SHARED(Locks::mutator_lock_) { std::string temp; StringPiece name(klass->GetDescriptor(&temp)); - if (data_->image_class_descriptors_->find(name) != data_->image_class_descriptors_->end()) { - data_->image_classes_.push_back(hs_.NewHandle(klass)); + auto it = data_->image_class_descriptors_->find(name); + if (it != data_->image_class_descriptors_->end()) { + if (LIKELY(klass->IsResolved())) { + data_->image_classes_.push_back(hs_.NewHandle(klass)); + } else { + DCHECK(klass->IsErroneousUnresolved()); + VLOG(compiler) << "Removing unresolved class from image classes: " << name; + data_->image_class_descriptors_->erase(it); + } } else { // Check whether it is initialized and has a clinit. They must be kept, too. if (klass->IsInitialized() && klass->FindClassInitializer( diff --git a/runtime/oat_file.cc b/runtime/oat_file.cc index 5c5523d9c8..de4826f417 100644 --- a/runtime/oat_file.cc +++ b/runtime/oat_file.cc @@ -581,9 +581,9 @@ bool OatFileBase::Setup(int zip_fd, const char* abs_dex_location, std::string* e const char* dex_file_location_data = reinterpret_cast<const char*>(oat); oat += dex_file_location_size; - std::string dex_file_location = ResolveRelativeEncodedDexLocation( - abs_dex_location, - std::string(dex_file_location_data, dex_file_location_size)); + std::string dex_file_location(dex_file_location_data, dex_file_location_size); + std::string dex_file_name = + ResolveRelativeEncodedDexLocation(abs_dex_location, dex_file_location); uint32_t dex_file_checksum; if (UNLIKELY(!ReadOatDexFileData(*this, &oat, &dex_file_checksum))) { @@ -638,7 +638,7 @@ bool OatFileBase::Setup(int zip_fd, const char* abs_dex_location, std::string* e error_msg, uncompressed_dex_files_.get()); } else { - loaded = dex_file_loader.Open(dex_file_location.c_str(), + loaded = dex_file_loader.Open(dex_file_name.c_str(), dex_file_location, /*verify=*/ false, /*verify_checksum=*/ false, @@ -819,7 +819,7 @@ bool OatFileBase::Setup(int zip_fd, const char* abs_dex_location, std::string* e this, header->string_ids_size_, sizeof(GcRoot<mirror::String>), string_bss_mapping); std::string canonical_location = - DexFileLoader::GetDexCanonicalLocation(dex_file_location.c_str()); + DexFileLoader::GetDexCanonicalLocation(dex_file_name.c_str()); // Create the OatDexFile and add it to the owning container. OatDexFile* oat_dex_file = new OatDexFile(this, |