< prev index next >
src/share/vm/gc_implementation/g1/heapRegion.cpp
Print this page
rev 7698 : [mq]: fix-iterate-oop-kim
*** 1,7 ****
/*
! * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 432,468 ****
}
// If we finish the above loop...We have a parseable object that
// begins on or before the start of the memory region, and ends
// inside or spans the entire region.
-
assert(cur <= start, "Loop postcondition");
do {
! assert(obj->klass_or_null() != NULL, "Loop invariant");
assert((cur + block_size(cur)) > (HeapWord*)obj, "Loop invariant");
- assert(obj == oop(cur), "Loop invariant");
if (obj->klass_or_null() == NULL) {
// Ran into an unparseable point.
return cur;
}
// Advance the current pointer. "obj" still points to the object to iterate.
cur = cur + block_size(cur);
if (!g1h->is_obj_dead(obj)) {
! // Non-object arrays are sometimes marked imprecise at the object start. We
// always need to iterate over them in full.
// We only iterate over object arrays in full if they are completely contained
// in the memory region.
if (!obj->is_objArray() || (((HeapWord*)obj) >= start && cur < end)) {
obj->oop_iterate(cl);
} else {
obj->oop_iterate(cl, mr);
}
}
- obj = oop(cur);
} while (cur < end);
return NULL;
}
--- 432,466 ----
}
// If we finish the above loop...We have a parseable object that
// begins on or before the start of the memory region, and ends
// inside or spans the entire region.
assert(cur <= start, "Loop postcondition");
+ assert(obj->klass_or_null() != NULL, "Loop invariant");
do {
! obj = oop(cur);
assert((cur + block_size(cur)) > (HeapWord*)obj, "Loop invariant");
if (obj->klass_or_null() == NULL) {
// Ran into an unparseable point.
return cur;
}
// Advance the current pointer. "obj" still points to the object to iterate.
cur = cur + block_size(cur);
if (!g1h->is_obj_dead(obj)) {
! // Non-objArrays are sometimes marked imprecise at the object start. We
// always need to iterate over them in full.
// We only iterate over object arrays in full if they are completely contained
// in the memory region.
if (!obj->is_objArray() || (((HeapWord*)obj) >= start && cur < end)) {
obj->oop_iterate(cl);
} else {
obj->oop_iterate(cl, mr);
}
}
} while (cur < end);
return NULL;
}
*** 673,683 ****
#endif // PRODUCT
}
template <class T>
void do_oop_work(T* p) {
- // gclog_or_tty->print_cr("Verifying address " PTR_FORMAT, p2i(p));
assert(_containing_obj != NULL, "Precondition");
assert(!_g1h->is_obj_dead_cond(_containing_obj, _vo),
"Precondition");
T heap_oop = oopDesc::load_heap_oop(p);
if (!oopDesc::is_null(heap_oop)) {
--- 671,680 ----
< prev index next >