summaryrefslogtreecommitdiff
path: root/src/class_linker.cc
diff options
context:
space:
mode:
author Ian Rogers <irogers@google.com> 2011-10-27 15:19:26 -0700
committer Ian Rogers <irogers@google.com> 2011-10-28 23:14:15 -0700
commit28ad40dc3ec2f09b0ffd4f6d6787bf1b532ccd5d (patch)
treef5628e47948a0d255112a3a7a01b67db41c8d424 /src/class_linker.cc
parente0918556e7551de638870dcad3f2023f94f85a50 (diff)
Support for unresolved types in new-instance during verification.
Also, ensure that classes that don't load are erroneous, warn early about exceptions left on a thread by the verifier/compiler, factor out slowpath checks for the compiler and fix the slowpath selector for const-class. This change causes more dex cache misses at runtime (more slowpath execution). It also requires a "mm clean-oat". Change-Id: I014b49ebdd7d8f7dd2e39cc0958fc0b708d58c4c
Diffstat (limited to 'src/class_linker.cc')
-rw-r--r--src/class_linker.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/class_linker.cc b/src/class_linker.cc
index f49f546aa3..8f4029a354 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -1039,6 +1039,7 @@ Class* ClassLinker::DefineClass(const std::string& descriptor,
if (!LoadSuperAndInterfaces(klass, dex_file)) {
// Loading failed.
CHECK(self->IsExceptionPending());
+ klass->SetStatus(Class::kStatusError);
lock.NotifyAll();
return NULL;
}
@@ -1048,6 +1049,7 @@ Class* ClassLinker::DefineClass(const std::string& descriptor,
if (!LinkClass(klass)) {
// Linking failed.
CHECK(self->IsExceptionPending());
+ klass->SetStatus(Class::kStatusError);
lock.NotifyAll();
return NULL;
}