diff options
| -rw-r--r-- | runtime/verifier/reg_type.h | 2 | ||||
| -rw-r--r-- | runtime/verifier/reg_type_cache.cc | 1 | ||||
| -rw-r--r-- | runtime/verifier/reg_type_test.cc | 8 |
3 files changed, 11 insertions, 0 deletions
diff --git a/runtime/verifier/reg_type.h b/runtime/verifier/reg_type.h index d429dfd411..34d6caa6c7 100644 --- a/runtime/verifier/reg_type.h +++ b/runtime/verifier/reg_type.h @@ -340,6 +340,8 @@ class PrimitiveType : public RegType { public: PrimitiveType(mirror::Class* klass, const std::string& descriptor, uint16_t cache_id) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); + + bool HasClassVirtual() const OVERRIDE { return true; } }; class Cat1Type : public PrimitiveType { diff --git a/runtime/verifier/reg_type_cache.cc b/runtime/verifier/reg_type_cache.cc index bffec4b0e7..fb0616daf5 100644 --- a/runtime/verifier/reg_type_cache.cc +++ b/runtime/verifier/reg_type_cache.cc @@ -288,6 +288,7 @@ const Type* RegTypeCache::CreatePrimitiveTypeInstance(const std::string& descrip if (!descriptor.empty()) { klass = art::Runtime::Current()->GetClassLinker()->FindSystemClass(Thread::Current(), descriptor.c_str()); + DCHECK(klass != nullptr); } const Type* entry = Type::CreateInstance(klass, descriptor, RegTypeCache::primitive_count_); RegTypeCache::primitive_count_++; diff --git a/runtime/verifier/reg_type_test.cc b/runtime/verifier/reg_type_test.cc index aad3b5ab99..2fecc8b25f 100644 --- a/runtime/verifier/reg_type_test.cc +++ b/runtime/verifier/reg_type_test.cc @@ -112,6 +112,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(bool_reg_type.IsDoubleTypes()); EXPECT_TRUE(bool_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(bool_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(bool_reg_type.HasClass()); const RegType& byte_reg_type = cache.Byte(); EXPECT_FALSE(byte_reg_type.IsUndefined()); @@ -144,6 +145,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(byte_reg_type.IsDoubleTypes()); EXPECT_TRUE(byte_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(byte_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(byte_reg_type.HasClass()); const RegType& char_reg_type = cache.Char(); EXPECT_FALSE(char_reg_type.IsUndefined()); @@ -176,6 +178,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(char_reg_type.IsDoubleTypes()); EXPECT_TRUE(char_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(char_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(char_reg_type.HasClass()); const RegType& short_reg_type = cache.Short(); EXPECT_FALSE(short_reg_type.IsUndefined()); @@ -208,6 +211,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(short_reg_type.IsDoubleTypes()); EXPECT_TRUE(short_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(short_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(short_reg_type.HasClass()); const RegType& int_reg_type = cache.Integer(); EXPECT_FALSE(int_reg_type.IsUndefined()); @@ -240,6 +244,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(int_reg_type.IsDoubleTypes()); EXPECT_TRUE(int_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(int_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(int_reg_type.HasClass()); const RegType& long_reg_type = cache.LongLo(); EXPECT_FALSE(long_reg_type.IsUndefined()); @@ -272,6 +277,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(long_reg_type.IsDoubleTypes()); EXPECT_FALSE(long_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(long_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(long_reg_type.HasClass()); const RegType& float_reg_type = cache.Float(); EXPECT_FALSE(float_reg_type.IsUndefined()); @@ -304,6 +310,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_FALSE(float_reg_type.IsDoubleTypes()); EXPECT_FALSE(float_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(float_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(float_reg_type.HasClass()); const RegType& double_reg_type = cache.DoubleLo(); EXPECT_FALSE(double_reg_type.IsUndefined()); @@ -336,6 +343,7 @@ TEST_F(RegTypeTest, Primitives) { EXPECT_TRUE(double_reg_type.IsDoubleTypes()); EXPECT_FALSE(double_reg_type.IsArrayIndexTypes()); EXPECT_FALSE(double_reg_type.IsNonZeroReferenceTypes()); + EXPECT_TRUE(double_reg_type.HasClass()); } class RegTypeReferenceTest : public CommonRuntimeTest {}; |