diff options
| author | 2017-04-19 12:31:42 +0000 | |
|---|---|---|
| committer | 2017-04-19 12:31:43 +0000 | |
| commit | 25009fdd7a5dccc957afc8178ca5d3733f899147 (patch) | |
| tree | a6c03673b4247b338b8418a0d3feaf128068c71f /compiler/driver/compiler_driver_test.cc | |
| parent | 46d342f845f5faadac1a61d064ccca3a5d2601c7 (diff) | |
| parent | c7da1d61ba0fc38950f303813d4ba8c2d6d05c7f (diff) | |
Merge "Record class status after verification."
Diffstat (limited to 'compiler/driver/compiler_driver_test.cc')
| -rw-r--r-- | compiler/driver/compiler_driver_test.cc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/compiler/driver/compiler_driver_test.cc b/compiler/driver/compiler_driver_test.cc index fa1b3a304a..42ff1e748a 100644 --- a/compiler/driver/compiler_driver_test.cc +++ b/compiler/driver/compiler_driver_test.cc @@ -23,6 +23,7 @@ #include "art_method-inl.h" #include "class_linker-inl.h" #include "common_compiler_test.h" +#include "compiled_class.h" #include "dex_file.h" #include "dex_file_types.h" #include "gc/heap.h" @@ -319,6 +320,47 @@ TEST_F(CompilerDriverProfileTest, ProfileGuidedCompilation) { CheckCompiledMethods(class_loader, "LSecond;", s); } +// Test that a verify only compiler filter updates the CompiledClass map, +// which will be used for OatClass. +class CompilerDriverVerifyTest : public CompilerDriverTest { + protected: + CompilerFilter::Filter GetCompilerFilter() const OVERRIDE { + return CompilerFilter::kVerifyProfile; + } + + void CheckVerifiedClass(jobject class_loader, const std::string& clazz) const { + ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); + Thread* self = Thread::Current(); + ScopedObjectAccess soa(self); + StackHandleScope<1> hs(self); + Handle<mirror::ClassLoader> h_loader( + hs.NewHandle(soa.Decode<mirror::ClassLoader>(class_loader))); + mirror::Class* klass = class_linker->FindClass(self, clazz.c_str(), h_loader); + ASSERT_NE(klass, nullptr); + EXPECT_TRUE(klass->IsVerified()); + + CompiledClass* compiled_class = compiler_driver_->GetCompiledClass( + ClassReference(&klass->GetDexFile(), klass->GetDexTypeIndex().index_)); + ASSERT_NE(compiled_class, nullptr); + EXPECT_EQ(compiled_class->GetStatus(), mirror::Class::kStatusVerified); + } +}; + +TEST_F(CompilerDriverVerifyTest, VerifyCompilation) { + Thread* self = Thread::Current(); + jobject class_loader; + { + ScopedObjectAccess soa(self); + class_loader = LoadDex("ProfileTestMultiDex"); + } + ASSERT_NE(class_loader, nullptr); + + CompileAll(class_loader); + + CheckVerifiedClass(class_loader, "LMain;"); + CheckVerifiedClass(class_loader, "LSecond;"); +} + // TODO: need check-cast test (when stub complete & we can throw/catch } // namespace art |