in G1RemSet.cpp the assert that checks the liveness uses the wrong liveness when printing on error:
assert(!hr->is_old() ||
top_at_rebuild_start == NULL ||
total_marked_bytes == _cm->liveness(region_idx) * HeapWordSize,
"Marked bytes " SIZE_FORMAT " for region %u (%s) in [bottom, TAMS) do not match liveness during mark " SIZE_FORMAT " "
"(" PTR_FORMAT " " PTR_FORMAT " " PTR_FORMAT ")",
total_marked_bytes, hr->hrm_index(), hr->get_type_str(), _cm->liveness(region_idx) * HeapWordSize,
p2i(hr->bottom()), p2i(top_at_mark_start), p2i(top_at_rebuild_start));
i.e. the "_cm->liveness(region_idx) * HeapWordSize" should actually just be "hr->marked_bytes()".