summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Readme.html2
-rw-r--r--src/main/javassist/compiler/CodeGen.java2
-rw-r--r--src/test/javassist/JvstTest4.java18
3 files changed, 20 insertions, 2 deletions
diff --git a/Readme.html b/Readme.html
index 5066e134..251e0e95 100644
--- a/Readme.html
+++ b/Readme.html
@@ -283,7 +283,7 @@ see javassist.Dump.
<p>-version 3.19
<ul>
-<li>JIRA JASSIST-158, 205, 206, 207, 212, 216.
+<li>JIRA JASSIST-158, 205, 206, 207, 211, 212, 216.
</ul>
</p>
diff --git a/src/main/javassist/compiler/CodeGen.java b/src/main/javassist/compiler/CodeGen.java
index bf61a2b1..bbcce895 100644
--- a/src/main/javassist/compiler/CodeGen.java
+++ b/src/main/javassist/compiler/CodeGen.java
@@ -434,7 +434,7 @@ public abstract class CodeGen extends Visitor implements Opcode, TokenId {
if (notDo)
bytecode.write16bit(pc, pc3 - pc + 1);
- boolean alwaysBranch = compileBooleanExpr(true, expr);
+ boolean alwaysBranch = compileBooleanExpr(true, expr) && breakList.size() == 0;
bytecode.addIndex(pc2 - bytecode.currentPc() + 1);
patchGoto(breakList, bytecode.currentPc());
diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java
index df4533bb..f1aca09e 100644
--- a/src/test/javassist/JvstTest4.java
+++ b/src/test/javassist/JvstTest4.java
@@ -938,4 +938,22 @@ public class JvstTest4 extends JvstTestRoot {
cc.writeFile();
Object obj = make(cc.getName());
}
+
+ public void testWhileTrueKO() throws Exception {
+ final ClassPool pool = ClassPool.getDefault();
+ final CtClass cc = pool.makeClass("test4.TestWhileTrueKO");
+ String source = "public void testWhile() { while(true) { break; } }";
+ cc.addMethod(CtMethod.make(source, cc));
+ cc.writeFile();
+ make(cc.getName());
+ }
+
+ public void testWhileTrueOK() throws Exception {
+ final ClassPool pool = ClassPool.getDefault();
+ final CtClass cc = pool.makeClass("test4.TestWhileTrueOK");
+ String source = "public void testWhile() { while(0==0) { break; }}";
+ cc.addMethod(CtMethod.make(source, cc));
+ cc.writeFile();
+ make(cc.getName());
+ }
}