--- 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);
}