diff src/share/vm/opto/macro.cpp @ 4778:35acf8f0a2e4

7128352: assert(obj_node == obj) failed Summary: Compare uncasted object nodes. Reviewed-by: never
author kvn
date Tue, 10 Jan 2012 18:05:38 -0800
parents e9a5e0a812c8
children b0ff910edfc9
line wrap: on
line diff
--- a/src/share/vm/opto/macro.cpp	Sat Jan 07 13:26:43 2012 -0800
+++ b/src/share/vm/opto/macro.cpp	Tue Jan 10 18:05:38 2012 -0800
@@ -1818,7 +1818,7 @@
         AbstractLockNode* alock = u->as_AbstractLock();
         // Check lock's box since box could be referenced by Lock's debug info.
         if (alock->box_node() == oldbox) {
-          assert(alock->obj_node() == obj, "");
+          assert(alock->obj_node()->eqv_uncast(obj), "");
           // Mark eliminated all related locks and unlocks.
           alock->set_non_esc_obj();
         }
@@ -1845,7 +1845,7 @@
     Node* u = oldbox->raw_out(i);
     if (u->is_AbstractLock()) {
       AbstractLockNode* alock = u->as_AbstractLock();
-      if (alock->obj_node() == obj && alock->box_node() == oldbox) {
+      if (alock->box_node() == oldbox && alock->obj_node()->eqv_uncast(obj)) {
         // Replace Box and mark eliminated all related locks and unlocks.
         alock->set_non_esc_obj();
         _igvn.hash_delete(alock);
@@ -1854,7 +1854,7 @@
         next_edge = false;
       }
     }
-    if (u->is_FastLock() && u->as_FastLock()->obj_node() == obj) {
+    if (u->is_FastLock() && u->as_FastLock()->obj_node()->eqv_uncast(obj)) {
       FastLockNode* flock = u->as_FastLock();
       assert(flock->box_node() == oldbox, "sanity");
       _igvn.hash_delete(flock);
@@ -1875,7 +1875,7 @@
         for (int idx = 0; idx < num_mon; idx++) {
           Node* obj_node = sfn->monitor_obj(jvms, idx);
           Node* box_node = sfn->monitor_box(jvms, idx);
-          if (box_node == oldbox && obj_node == obj) {
+          if (box_node == oldbox && obj_node->eqv_uncast(obj)) {
             int j = jvms->monitor_box_offset(idx);
             _igvn.hash_delete(u);
             u->set_req(j, newbox);
@@ -1912,7 +1912,7 @@
             alock = u->as_AbstractLock();
             if (alock->box_node() == box_node) {
               // Verify that this Box is referenced only by related locks.
-              assert(alock->obj_node() == obj, "");
+              assert(alock->obj_node()->eqv_uncast(obj), "");
               // Mark all related locks and unlocks.
               alock->set_nested();
             }
@@ -1931,7 +1931,8 @@
     Node* obj = alock->obj_node();
     for (uint j = 0; j < obj->outcnt(); j++) {
       Node* o = obj->raw_out(j);
-      if (o->is_AbstractLock() && o->as_AbstractLock()->obj_node() == obj) {
+      if (o->is_AbstractLock() &&
+          o->as_AbstractLock()->obj_node()->eqv_uncast(obj)) {
         alock = o->as_AbstractLock();
         Node* box = alock->box_node();
         // Replace old box node with new eliminated box for all users