# HG changeset patch
# User rkennke
# Date 1523475226 -7200
#      Wed Apr 11 21:33:46 2018 +0200
# Node ID be2fb75d192af7b98cd8c096c59b2082698ebe3b
# Parent  6a880e57685653c68836eb59ef2ba19ed313e6d3
8201442: objArrayOopDesc::atomic_compare_exchange_oop() must use obj+offset in HeapAccess call

diff --git a/src/hotspot/share/oops/objArrayOop.cpp b/src/hotspot/share/oops/objArrayOop.cpp
--- a/src/hotspot/share/oops/objArrayOop.cpp
+++ b/src/hotspot/share/oops/objArrayOop.cpp
@@ -31,13 +31,13 @@
 
 oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value,
                                                  oop compare_value) {
-  volatile HeapWord* dest;
+  ptrdiff_t offs;
   if (UseCompressedOops) {
-    dest = (HeapWord*)obj_at_addr<narrowOop>(index);
+    offs = objArrayOopDesc::obj_at_offset<narrowOop>(index);
   } else {
-    dest = (HeapWord*)obj_at_addr<oop>(index);
+    offs = objArrayOopDesc::obj_at_offset<oop>(index);
   }
-  return HeapAccess<>::oop_atomic_cmpxchg(exchange_value, dest, compare_value);
+  return HeapAccess<>::oop_atomic_cmpxchg_at(exchange_value, as_oop(), offs, compare_value);
 }
 
 Klass* objArrayOopDesc::element_klass() {