1.1 --- a/src/share/vm/opto/ifnode.cpp Wed Jul 15 13:37:35 2009 -0700 1.2 +++ b/src/share/vm/opto/ifnode.cpp Thu Jul 16 14:10:42 2009 -0700 1.3 @@ -378,7 +378,18 @@ 1.4 1.5 // Force the original merge dead 1.6 igvn->hash_delete(r); 1.7 - r->set_req_X(0,NULL,igvn); 1.8 + // First, remove region's dead users. 1.9 + for (DUIterator_Last lmin, l = r->last_outs(lmin); l >= lmin;) { 1.10 + Node* u = r->last_out(l); 1.11 + if( u == r ) { 1.12 + r->set_req(0, NULL); 1.13 + } else { 1.14 + assert(u->outcnt() == 0, "only dead users"); 1.15 + igvn->remove_dead_node(u); 1.16 + } 1.17 + l -= 1; 1.18 + } 1.19 + igvn->remove_dead_node(r); 1.20 1.21 // Now remove the bogus extra edges used to keep things alive 1.22 igvn->remove_dead_node( hook );