diff options
| author | 2017-11-02 10:41:55 +0000 | |
|---|---|---|
| committer | 2017-11-02 10:41:55 +0000 | |
| commit | 811c33a62e3ae2f90273a6e5f6c36da79d8a970a (patch) | |
| tree | 16239b0f24ca4dae6f8db9ba3af5e4c4f8473b06 /runtime/class_linker_test.cc | |
| parent | 321b3ca9a36d769283c64d4bdee0798db80af524 (diff) | |
| parent | 005ac512de3d734624a5db39bb14b71763ba730d (diff) | |
Merge "ART: Add mirror classes for VarHandles"
Diffstat (limited to 'runtime/class_linker_test.cc')
| -rw-r--r-- | runtime/class_linker_test.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc index 3e92317682..4d9282654a 100644 --- a/runtime/class_linker_test.cc +++ b/runtime/class_linker_test.cc @@ -48,6 +48,7 @@ #include "mirror/reference.h" #include "mirror/stack_trace_element.h" #include "mirror/string-inl.h" +#include "mirror/var_handle.h" #include "scoped_thread_state_change-inl.h" #include "standard_dex_file.h" #include "thread-current-inl.h" @@ -777,6 +778,39 @@ struct CallSiteOffsets : public CheckOffsets<mirror::CallSite> { } }; +struct VarHandleOffsets : public CheckOffsets<mirror::VarHandle> { + VarHandleOffsets() : CheckOffsets<mirror::VarHandle>( + false, "Ljava/lang/invoke/VarHandle;") { + addOffset(OFFSETOF_MEMBER(mirror::VarHandle, access_modes_bit_mask_), "accessModesBitMask"); + addOffset(OFFSETOF_MEMBER(mirror::VarHandle, coordinate_type0_), "coordinateType0"); + addOffset(OFFSETOF_MEMBER(mirror::VarHandle, coordinate_type1_), "coordinateType1"); + addOffset(OFFSETOF_MEMBER(mirror::VarHandle, var_type_), "varType"); + } +}; + +struct FieldVarHandleOffsets : public CheckOffsets<mirror::FieldVarHandle> { + FieldVarHandleOffsets() : CheckOffsets<mirror::FieldVarHandle>( + false, "Ljava/lang/invoke/FieldVarHandle;") { + addOffset(OFFSETOF_MEMBER(mirror::FieldVarHandle, art_field_), "artField"); + } +}; + +struct ByteArrayViewVarHandleOffsets : public CheckOffsets<mirror::ByteArrayViewVarHandle> { + ByteArrayViewVarHandleOffsets() : CheckOffsets<mirror::ByteArrayViewVarHandle>( + false, "Ljava/lang/invoke/ByteArrayViewVarHandle;") { + addOffset(OFFSETOF_MEMBER(mirror::ByteArrayViewVarHandle, native_byte_order_), + "nativeByteOrder"); + } +}; + +struct ByteBufferViewVarHandleOffsets : public CheckOffsets<mirror::ByteBufferViewVarHandle> { + ByteBufferViewVarHandleOffsets() : CheckOffsets<mirror::ByteBufferViewVarHandle>( + false, "Ljava/lang/invoke/ByteBufferViewVarHandle;") { + addOffset(OFFSETOF_MEMBER(mirror::ByteBufferViewVarHandle, native_byte_order_), + "nativeByteOrder"); + } +}; + // C++ fields must exactly match the fields in the Java classes. If this fails, // reorder the fields in the C++ class. Managed class fields are ordered by // ClassLinker::LinkFields. @@ -802,6 +836,10 @@ TEST_F(ClassLinkerTest, ValidateFieldOrderOfJavaCppUnionClasses) { EXPECT_TRUE(MethodHandlesLookupOffsets().Check()); EXPECT_TRUE(EmulatedStackFrameOffsets().Check()); EXPECT_TRUE(CallSiteOffsets().Check()); + EXPECT_TRUE(VarHandleOffsets().Check()); + EXPECT_TRUE(FieldVarHandleOffsets().Check()); + EXPECT_TRUE(ByteArrayViewVarHandleOffsets().Check()); + EXPECT_TRUE(ByteBufferViewVarHandleOffsets().Check()); } TEST_F(ClassLinkerTest, FindClassNonexistent) { |