--- old/src/hotspot/share/gc/shenandoah/shenandoahAsserts.cpp 2020-01-24 15:21:04.484478630 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahAsserts.cpp 2020-01-24 15:21:04.196473789 +0100 @@ -67,7 +67,7 @@ ShenandoahMarkingContext* const ctx = heap->marking_context(); msg.append(" " PTR_FORMAT " - klass " PTR_FORMAT " %s\n", p2i(obj), p2i(obj->klass()), obj->klass()->external_name()); - msg.append(" %3s allocated after mark start\n", ctx->allocated_after_mark_start(obj) ? "" : "not"); + msg.append(" %3s allocated after mark start\n", ctx->allocated_after_mark_start(cast_from_oop(obj)) ? "" : "not"); msg.append(" %3s marked \n", ctx->is_marked(obj) ? "" : "not"); msg.append(" %3s in collection set\n", heap->in_collection_set(obj) ? "" : "not"); if (heap->traversal_gc() != NULL) { --- old/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp 2020-01-24 15:21:04.988487101 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp 2020-01-24 15:21:04.652481453 +0100 @@ -42,7 +42,7 @@ } inline oop ShenandoahBarrierSet::resolve_forwarded(oop p) { - if (p != NULL) { + if (cast_from_oop(p) != NULL) { return resolve_forwarded_not_null(p); } else { return p; --- old/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetClone.inline.hpp 2020-01-24 15:21:05.436494632 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetClone.inline.hpp 2020-01-24 15:21:05.212490867 +0100 @@ -46,7 +46,7 @@ T o = RawAccess<>::oop_load(p); if (!CompressedOops::is_null(o)) { oop obj = CompressedOops::decode_not_null(o); - if (_cset->is_in(obj)) { + if (_cset->is_in(cast_from_oop(obj))) { oop fwd = _bs->resolve_forwarded_not_null(obj); if (EVAC && obj == fwd) { fwd = _heap->evacuate_object(obj, _thread); --- old/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.hpp 2020-01-24 15:21:05.824501154 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.hpp 2020-01-24 15:21:05.576496985 +0100 @@ -80,7 +80,7 @@ inline bool is_in(ShenandoahHeapRegion* r) const; inline bool is_in(size_t region_number) const; - inline bool is_in(oop obj) const; + inline bool is_in(HeapWord* p) const; void print_on(outputStream* out) const; --- old/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.inline.hpp 2020-01-24 15:21:06.204507541 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.inline.hpp 2020-01-24 15:21:05.992503978 +0100 @@ -39,9 +39,9 @@ return is_in(r->region_number()); } -bool ShenandoahCollectionSet::is_in(oop p) const { +bool ShenandoahCollectionSet::is_in(HeapWord* p) const { assert(_heap->is_in(p), "Must be in the heap"); - uintx index = (cast_from_oop(p)) >> _region_size_bytes_shift; + uintx index = ((uintx) p) >> _region_size_bytes_shift; // no need to subtract the bottom of the heap from p, // _biased_cset_map is biased return _biased_cset_map[index] == 1; --- old/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionSet.hpp 2020-01-24 15:21:06.580513862 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionSet.hpp 2020-01-24 15:21:06.364510232 +0100 @@ -84,7 +84,7 @@ inline bool is_in(ShenandoahHeapRegion* r) const; inline bool is_in(size_t region_number) const; - inline bool is_in(oop p) const; + inline bool is_in(HeapWord* p) const; void print_on(outputStream* out) const; --- old/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionSet.inline.hpp 2020-01-24 15:21:06.988520720 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionSet.inline.hpp 2020-01-24 15:21:06.744516618 +0100 @@ -39,9 +39,9 @@ return is_in(r->region_number()); } -bool ShenandoahHeapRegionSet::is_in(oop p) const { +bool ShenandoahHeapRegionSet::is_in(HeapWord* p) const { assert(_heap->is_in(p), "Must be in the heap"); - uintx index = (cast_from_oop(p)) >> _region_size_bytes_shift; + uintx index = ((uintx) p) >> _region_size_bytes_shift; // no need to subtract the bottom of the heap from p, // _biased_set_map is biased return _biased_set_map[index] == 1; --- old/src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.cpp 2020-01-24 15:21:07.388527444 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.cpp 2020-01-24 15:21:07.140523275 +0100 @@ -297,7 +297,7 @@ void do_object(oop p) { assert(_from_region != NULL, "must set before work"); assert(_heap->complete_marking_context()->is_marked(p), "must be marked"); - assert(!_heap->complete_marking_context()->allocated_after_mark_start(p), "must be truly marked"); + assert(!_heap->complete_marking_context()->allocated_after_mark_start(cast_from_oop(p)), "must be truly marked"); size_t obj_size = p->size(); if (_compact_point + obj_size > _to_region->end()) { --- old/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.hpp 2020-01-24 15:21:08.016538000 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.hpp 2020-01-24 15:21:07.624531411 +0100 @@ -55,7 +55,7 @@ inline bool is_marked(oop obj) const; - inline bool allocated_after_mark_start(oop obj) const; + inline bool allocated_after_mark_start(HeapWord* addr) const; inline MarkBitMap* mark_bit_map(); --- old/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.inline.hpp 2020-01-24 15:21:08.392544321 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.inline.hpp 2020-01-24 15:21:08.176540690 +0100 @@ -33,15 +33,16 @@ inline bool ShenandoahMarkingContext::mark(oop obj) { shenandoah_assert_not_forwarded(NULL, obj); - return (! allocated_after_mark_start(obj)) && _mark_bit_map.par_mark(obj); + HeapWord* addr = cast_from_oop(obj); + return (! allocated_after_mark_start(addr)) && _mark_bit_map.par_mark(addr); } inline bool ShenandoahMarkingContext::is_marked(oop obj) const { - return allocated_after_mark_start(obj) || _mark_bit_map.is_marked(obj); + HeapWord* addr = cast_from_oop(obj); + return allocated_after_mark_start(addr) || _mark_bit_map.is_marked(addr); } -inline bool ShenandoahMarkingContext::allocated_after_mark_start(oop obj) const { - HeapWord* addr = cast_from_oop(obj); +inline bool ShenandoahMarkingContext::allocated_after_mark_start(HeapWord* addr) const { uintx index = ((uintx) addr) >> ShenandoahHeapRegion::region_size_bytes_shift(); HeapWord* top_at_mark_start = _top_at_mark_starts[index]; bool alloc_after_mark_start = addr >= top_at_mark_start; --- old/src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp 2020-01-24 15:21:08.764550574 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp 2020-01-24 15:21:08.548546943 +0100 @@ -88,7 +88,8 @@ // For performance reasons, only fully verify non-marked field values. // We are here when the host object for *p is already marked. - if (_map->par_mark(obj)) { + HeapWord* addr = cast_from_oop(obj); + if (_map->par_mark(addr)) { verify_oop_at(p, obj); _stack->push(ShenandoahVerifierTask(obj)); }