summaryrefslogtreecommitdiffstats
path: root/src/verifier/reg_type.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/verifier/reg_type.cc')
-rw-r--r--src/verifier/reg_type.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/verifier/reg_type.cc b/src/verifier/reg_type.cc
index 774c2b29e..82aa6c679 100644
--- a/src/verifier/reg_type.cc
+++ b/src/verifier/reg_type.cc
@@ -494,6 +494,7 @@ ReferenceType::ReferenceType(mirror::Class* klass, std::string& descriptor, uint
PreciseReferenceType::PreciseReferenceType(mirror::Class* klass, std::string& descriptor,
uint16_t cache_id)
: RegType(klass, descriptor, cache_id) {
+ DCHECK(!klass->IsAbstract() || klass->IsArrayClass());
}
UnresolvedUninitialisedThisRefType::UnresolvedUninitialisedThisRefType(std::string& descriptor,
@@ -609,7 +610,9 @@ const RegType& RegType::GetSuperClass(RegTypeCache* cache) const {
if (!IsUnresolvedTypes()) {
mirror::Class* super_klass = GetClass()->GetSuperClass();
if (super_klass != NULL) {
- return cache->FromClass(super_klass, IsPreciseReference());
+ // A super class of a precise type isn't precise as a precise type indicates the register
+ // holds exactly that type.
+ return cache->FromClass(super_klass, false);
} else {
return cache->Zero();
}