diff src/share/vm/gc_implementation/g1/g1BiasedArray.hpp @ 23038:34714dc91411

8031686: G1: assert(_hrs.max_length() == _expansion_regions) failed Summary: Using pointer_delta to avoid overflowing pointer calculation. Reviewed-by: jwilhelm, ehelin
author sjohanss
date Mon, 20 Jan 2014 10:55:54 +0100
parents 78bbf4d43a14
children dd9cc155639c
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp	Thu May 21 23:21:34 2015 -0700
+++ b/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp	Mon Jan 20 10:55:54 2014 +0100
@@ -75,7 +75,7 @@
     assert((uintptr_t)end % mapping_granularity_in_bytes == 0,
       err_msg("end mapping area address must be a multiple of mapping granularity %zd, is " PTR_FORMAT,
         mapping_granularity_in_bytes, p2i(end)));
-    size_t num_target_elems = (end - bottom) / (mapping_granularity_in_bytes / HeapWordSize);
+    size_t num_target_elems = pointer_delta(end, bottom, mapping_granularity_in_bytes);
     idx_t bias = (uintptr_t)bottom / mapping_granularity_in_bytes;
     address base = create_new_base_array(num_target_elems, target_elem_size_in_bytes);
     initialize_base(base, num_target_elems, bias, target_elem_size_in_bytes, log2_intptr(mapping_granularity_in_bytes));