From bf755fefbfcfbb2677a519c12efe7890f3879854 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Tue, 1 Aug 2017 13:42:56 -0700 Subject: 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 --- compiler/driver/compiler_driver.cc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'compiler/driver/compiler_driver.cc') 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& unverified_classes = + // Fetch the list of unverified classes. + const std::set& unverified_classes = verifier_deps->GetUnverifiedClasses(*dex_file); - std::set 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. -- cgit v1.2.3-59-g8ed1b