diff options
| author | 2018-03-16 10:58:24 +0000 | |
|---|---|---|
| committer | 2018-03-16 10:58:24 +0000 | |
| commit | e54c8ce806677cee48dcf9e33bb9f2d09ad70206 (patch) | |
| tree | fac3614dbca1a10ecb334f5442620f8af3601e1b /runtime/art_method.h | |
| parent | babfd0d4bd974aa23c8b6bb6b4698572e2e36d97 (diff) | |
| parent | ab2ce84d4995f05c38c5ebfefc6683b244a36260 (diff) | |
Merge "Fix dangling SingleImplementations left after class unloading" into pi-dev
Diffstat (limited to 'runtime/art_method.h')
| -rw-r--r-- | runtime/art_method.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/runtime/art_method.h b/runtime/art_method.h index 5d9b729847..3c6f230d15 100644 --- a/runtime/art_method.h +++ b/runtime/art_method.h @@ -172,8 +172,9 @@ class ArtMethod FINAL { return (GetAccessFlags() & synchonized) != 0; } + template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> bool IsFinal() { - return (GetAccessFlags() & kAccFinal) != 0; + return (GetAccessFlags<kReadBarrierOption>() & kAccFinal) != 0; } bool IsIntrinsic() { @@ -241,10 +242,11 @@ class ArtMethod FINAL { } // This is set by the class linker. + template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> bool IsDefault() { static_assert((kAccDefault & (kAccIntrinsic | kAccIntrinsicBits)) == 0, "kAccDefault conflicts with intrinsic modifier"); - return (GetAccessFlags() & kAccDefault) != 0; + return (GetAccessFlags<kReadBarrierOption>() & kAccDefault) != 0; } template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> @@ -279,8 +281,9 @@ class ArtMethod FINAL { return (GetAccessFlags() & mask) == mask; } + template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> bool IsAbstract() { - return (GetAccessFlags() & kAccAbstract) != 0; + return (GetAccessFlags<kReadBarrierOption>() & kAccAbstract) != 0; } bool IsSynthetic() { @@ -494,6 +497,7 @@ class ArtMethod FINAL { return DataOffset(kRuntimePointerSize); } + template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> ALWAYS_INLINE bool HasSingleImplementation() REQUIRES_SHARED(Locks::mutator_lock_); ALWAYS_INLINE void SetHasSingleImplementation(bool single_impl) { @@ -511,12 +515,15 @@ class ArtMethod FINAL { ArtMethod* GetCanonicalMethod(PointerSize pointer_size = kRuntimePointerSize) REQUIRES_SHARED(Locks::mutator_lock_); + template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> ArtMethod* GetSingleImplementation(PointerSize pointer_size) REQUIRES_SHARED(Locks::mutator_lock_); + template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier> ALWAYS_INLINE void SetSingleImplementation(ArtMethod* method, PointerSize pointer_size) { - DCHECK(!IsNative()); - DCHECK(IsAbstract()); // Non-abstract method's single implementation is just itself. + DCHECK(!IsNative<kReadBarrierOption>()); + // Non-abstract method's single implementation is just itself. + DCHECK(IsAbstract<kReadBarrierOption>()); SetDataPtrSize(method, pointer_size); } |