< prev index next >
src/share/vm/opto/parse3.cpp
Print this page
@@ -311,15 +311,24 @@
set_wrote_stable(true);
}
// Preserve allocation ptr to create precedent edge to it in membar
// generated on exit from constructor.
- if (C->eliminate_boxing() &&
- adr_type->isa_oopptr() && adr_type->is_oopptr()->is_ptr_to_boxed_value() &&
- AllocateNode::Ideal_allocation(obj, &_gvn) != NULL) {
+ if (AllocateNode::Ideal_allocation(obj, &_gvn) != NULL) {
+ if (field->is_final()) {
set_alloc_with_final(obj);
}
+ if (field->is_stable()) {
+ set_alloc_with_stable(obj);
+ }
+ }
+ else if (field->is_stable()) {
+ // stable field doesn't have allocation, set alloc_with_stable as NULL
+ // because its initialize vlaue is NodeSentinel. If not set NULL,
+ // next set_alloc_with_stable call might set none-NULL value successfully.
+ set_alloc_with_stable(NULL);
+ }
}
}
//=============================================================================
void Parse::do_anewarray() {
< prev index next >