langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java
changeset 25602 7ed5b85cdbb2
parent 25445 603f0c93d5c9
child 25604 8ff6a4ac812a
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Mon Jul 14 12:03:08 2014 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Mon Jul 14 13:36:30 2014 -0400
@@ -1072,7 +1072,8 @@
                              boolean testFirst) {
             Env<GenContext> loopEnv = env.dup(loop, new GenContext());
             int startpc = code.entryPoint();
-            if (testFirst) {
+            boolean recalculateState = false;
+            if (testFirst) { //while or for loop
                 CondItem c;
                 if (cond != null) {
                     code.statBegin(cond.pos);
@@ -1081,6 +1082,9 @@
                     c = items.makeCondItem(goto_);
                 }
                 Chain loopDone = c.jumpFalse();
+                if (loopDone == null) {
+                    recalculateState = true;
+                }
                 code.resolve(c.trueJumps);
                 genStat(body, loopEnv, CRT_STATEMENT | CRT_FLOW_TARGET);
                 if (varDebugInfo) {
@@ -1117,6 +1121,9 @@
                 code.resolve(c.jumpTrue(), startpc);
                 code.resolve(c.falseJumps);
             }
+            if (recalculateState && loopEnv.info.exit != null) {
+                loopEnv.info.exit.state.defined = code.state.defined.dup();
+            }
             code.resolve(loopEnv.info.exit);
         }