< 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 >