< prev index next >

src/hotspot/share/opto/output.cpp

Print this page

        

@@ -2410,13 +2410,16 @@
            last->as_Mach()->ideal_Opcode() == Op_Con) {
       last = bb->get_node(--_bb_end);
     }
     assert(!last->is_Mach() || last->as_Mach()->ideal_Opcode() != Op_Con, "");
     if( last->is_Catch() ||
-       (last->is_Mach() && last->as_Mach()->ideal_Opcode() == Op_Halt) ) {
-      // There might be a prior call.  Skip it.
-      while (_bb_start < _bb_end && bb->get_node(--_bb_end)->is_MachProj());
+       // Exclude unreachable path case when Halt node is in a separate block.
+       (_bb_end > 1 && last->is_Mach() && last->as_Mach()->ideal_Opcode() == Op_Halt) ) {
+      // There must be a prior call.  Skip it.
+      while( !bb->get_node(--_bb_end)->is_MachCall() ) {
+        assert( bb->get_node(_bb_end)->is_MachProj(), "skipping projections after expected call" );
+      }
     } else if( last->is_MachNullCheck() ) {
       // Backup so the last null-checked memory instruction is
       // outside the schedulable range. Skip over the nullcheck,
       // projection, and the memory nodes.
       Node *mem = last->in(1);
< prev index next >