< prev index next >

src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp

Print this page

        

@@ -25,10 +25,11 @@
 #ifndef SHARE_VM_GC_SHARED_MODREFBARRIERSET_INLINE_HPP
 #define SHARE_VM_GC_SHARED_MODREFBARRIERSET_INLINE_HPP
 
 #include "gc/shared/barrierSet.hpp"
 #include "gc/shared/modRefBarrierSet.hpp"
+#include "oops/compressedOops.inline.hpp"
 #include "oops/klass.inline.hpp"
 #include "oops/objArrayOop.hpp"
 #include "oops/oop.hpp"
 
 // count is number of array elements being written

@@ -103,11 +104,11 @@
     Klass* bound = objArrayOop(dst_obj)->element_klass();
     T* from = src;
     T* end = from + length;
     for (T* p = dst; from < end; from++, p++) {
       T element = *from;
-      if (bound->is_instanceof_or_null(element)) {
+      if (oopDesc::is_instanceof_or_null(CompressedOops::decode(element), bound)) {
         bs->template write_ref_field_pre<decorators>(p);
         *p = element;
       } else {
         // We must do a barrier to cover the partial copy.
         const size_t pd = pointer_delta(p, dst, (size_t)heapOopSize);
< prev index next >