src/hotspot/share/oops/access.inline.hpp
changeset 49383 bf2ff45e592f
parent 49347 edb65305d3ac
child 49454 689ebcfe04fd
--- a/src/hotspot/share/oops/access.inline.hpp	Wed Mar 14 00:30:56 2018 +0900
+++ b/src/hotspot/share/oops/access.inline.hpp	Tue Mar 13 17:13:35 2018 +0100
@@ -139,7 +139,8 @@
   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic {
     template <typename T>
     static bool access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
-      return GCBarrierType::arraycopy_in_heap(src_obj, dst_obj, src, dst, length);
+      GCBarrierType::arraycopy_in_heap(src_obj, dst_obj, src, dst, length);
+      return true;
     }
 
     template <typename T>
@@ -763,7 +764,7 @@
       HasDecorator<decorators, AS_RAW>::value, bool>::type
     arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T* dst, size_t length) {
       typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
-      return Raw::arraycopy(src, dst, length);
+      return Raw::arraycopy(src_obj, dst_obj, src, dst, length);
     }
 
     template <DecoratorSet decorators, typename T>
@@ -1077,7 +1078,9 @@
 
   template <DecoratorSet decorators, typename T>
   inline bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T *dst, size_t length) {
-    verify_types<decorators, T>();
+    STATIC_ASSERT((HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ||
+                   (IsSame<T, void>::value || IsIntegral<T>::value) ||
+                    IsFloatingPoint<T>::value)); // arraycopy allows type erased void elements
     typedef typename Decay<T>::type DecayedT;
     const DecoratorSet expanded_decorators = DecoratorFixup<decorators | IN_HEAP_ARRAY | IN_HEAP |
                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?