diff src/share/vm/c1/c1_Optimizer.cpp @ 4764:e5ac210043cd

7123108: C1: assert(if_state != NULL) failed: states do not match up Summary: In CEE, ensure if and common successor state are at the same inline level Reviewed-by: never
author roland
date Thu, 22 Dec 2011 10:55:53 +0100
parents 7bca37d28f32
children 701a83c86f28
line wrap: on
line diff
--- a/src/share/vm/c1/c1_Optimizer.cpp	Tue Dec 20 16:56:50 2011 +0100
+++ b/src/share/vm/c1/c1_Optimizer.cpp	Thu Dec 22 10:55:53 2011 +0100
@@ -125,9 +125,16 @@
   // inlining depths must match
   ValueStack* if_state = if_->state();
   ValueStack* sux_state = sux->state();
-  while (sux_state->scope() != if_state->scope()) {
-    if_state = if_state->caller_state();
-    assert(if_state != NULL, "states do not match up");
+  if (if_state->scope()->level() > sux_state->scope()->level()) {
+    while (sux_state->scope() != if_state->scope()) {
+      if_state = if_state->caller_state();
+      assert(if_state != NULL, "states do not match up");
+    }
+  } else if (if_state->scope()->level() < sux_state->scope()->level()) {
+    while (sux_state->scope() != if_state->scope()) {
+      sux_state = sux_state->caller_state();
+      assert(sux_state != NULL, "states do not match up");
+    }
   }
 
   if (sux_state->stack_size() <= if_state->stack_size()) return;