diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java index 96fd205d2..0f25e13c5 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java @@ -2444,7 +2444,9 @@ public abstract class JDTJava2CAstTranslator { WalkContext loopContext = new LoopContext(context, loopLabel, breakTarget, continueTarget); CAstNode loopBody = visitNode(n.getBody(), loopContext); - return doLoopTranslator.translateDoLoop(loopTest, loopBody, continueNode, breakNode, context); + CAstNode madeNode = doLoopTranslator.translateDoLoop(loopTest, loopBody, continueNode, breakNode, context); + context.pos().setPosition(madeNode, makePosition(n)); + return madeNode; } /** diff --git a/com.ibm.wala.cast.java.test.data/src/bugfixes/DoWhileInCase.java b/com.ibm.wala.cast.java.test.data/src/bugfixes/DoWhileInCase.java new file mode 100644 index 000000000..c4d07226e --- /dev/null +++ b/com.ibm.wala.cast.java.test.data/src/bugfixes/DoWhileInCase.java @@ -0,0 +1,17 @@ +package bugfixes; + +public class DoWhileInCase { + static int x = 3; + public static void main(String[] args) { + switch(x) { + case 1: + do { + System.out.println("Problem"); + x ++; + } while (x < 3); + break; + default: + System.out.println("Default"); + } + } +} diff --git a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java index 4eb2f8635..b0e98d95d 100644 --- a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java +++ b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java @@ -630,5 +630,9 @@ public abstract class JavaIRTests extends IRTests { Assert.assertEquals(2, SlicerTest.countAllocations(slice)); Assert.assertEquals(2, SlicerTest.countPutfields(slice)); } + + @Test public void testDoWhileInCase() throws IllegalArgumentException, CancelException, IOException { + runTest(singleTestSrc("bugfixes"), rtJar, simplePkgTestEntryPoint("bugfixes"), emptyList, true); + } }