diff options
author | 2017-08-01 13:42:56 -0700 | |
---|---|---|
committer | 2017-08-02 09:35:21 -0700 | |
commit | bf755fefbfcfbb2677a519c12efe7890f3879854 (patch) | |
tree | b8554c85e812d38a49f93fcbc1c760c35a5cbbff /compiler/driver/compiler_driver.cc | |
parent | 951853a68554d1bc5f50980194f1686cb5f41d83 (diff) |
Fix verifier deps determinism
Previously, the unverified_classes were not deterministic since
they were represented as a vector. This CL moves it to a set and adds
a regression test.
Bug: 63467744
Test: test-art-host
Change-Id: I891254a927228b1dc4d8e1c65d5e99ae58b854ea
Diffstat (limited to 'compiler/driver/compiler_driver.cc')
-rw-r--r-- | compiler/driver/compiler_driver.cc | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 0b1bce62c9..bd530ac6a6 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -1935,14 +1935,12 @@ bool CompilerDriver::FastVerify(jobject jclass_loader, // time. So instead we assume these classes still need to be verified at // runtime. for (const DexFile* dex_file : dex_files) { - // Fetch the list of unverified classes and turn it into a set for faster - // lookups. - const std::vector<dex::TypeIndex>& unverified_classes = + // Fetch the list of unverified classes. + const std::set<dex::TypeIndex>& unverified_classes = verifier_deps->GetUnverifiedClasses(*dex_file); - std::set<dex::TypeIndex> set(unverified_classes.begin(), unverified_classes.end()); for (uint32_t i = 0; i < dex_file->NumClassDefs(); ++i) { const DexFile::ClassDef& class_def = dex_file->GetClassDef(i); - if (set.find(class_def.class_idx_) == set.end()) { + if (unverified_classes.find(class_def.class_idx_) == unverified_classes.end()) { if (compiler_only_verifies) { // Just update the compiled_classes_ map. The compiler doesn't need to resolve // the type. |