<p dir="ltr">I was trying to implement ball larus path profiling on the following java program using soot.<br></p>
<p dir="ltr">1        package test1;</p>
<p dir="ltr">2        public class Main {</p>
<p dir="ltr">3            public static void main(String args[]) {</p>
<p dir="ltr">4                int x = args[0].length();</p>
<p dir="ltr">5                try {</p>
<p dir="ltr">6                    int b = x / 0;</p>
<p dir="ltr">7                    System.err.println(&quot;Here&quot;);</p>
<p dir="ltr">8                    System.err.println(b);</p>
<p dir="ltr">9                } catch (ArithmeticException e1) {</p>
<p dir="ltr">10                    if (x &lt; 5)</p>
<p dir="ltr">11                        x++;</p>
<p dir="ltr">12                    else</p>
<p dir="ltr">13                        x--;</p>
<p dir="ltr">14                    System.err.println(&quot;Exception: e1&quot;);</p>
<p dir="ltr">15                } catch (Exception e5) {</p>
<p dir="ltr">16                    x += 10;</p>
<p dir="ltr">17                } finally {</p>
<p dir="ltr">18                    System.err.println(&quot;Finally&quot;);</p>
<p dir="ltr">19                }</p>
<p dir="ltr">20                System.err.println(x);</p>
<p dir="ltr">21                return;</p>
<p dir="ltr">22            }</p>
<p dir="ltr">23        }<br></p>
<p dir="ltr">There is java.lang.ArithmeticException divide by zero on line 6. When I run the program without instrumentation through soot, the exception is thrown at line 6 and &quot;Here&quot; of line 7 is not printed. But when I run the instrumented code, than exception is thrown after line 7 ( print &quot;Here&quot; ). <br></p>
<p dir="ltr">javap -c output of uninstrumented class file<br></p>
<p dir="ltr">        3: invokevirtual #2 // Method java/lang/String.length:()I</p>
<p dir="ltr">       6: istore_1</p>
<p dir="ltr">       7: iload_1</p>
<p dir="ltr">       8: iconst_0</p>
<p dir="ltr">       9: idiv</p>
<p dir="ltr">      10: istore_2</p>
<p dir="ltr">      11: getstatic #3 // Field java/lang/System.err:Ljava/io/PrintStream;</p>
<p dir="ltr">      14: ldc #4 // String Here</p>
<p dir="ltr">      16: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V<br></p>
<p dir="ltr">division is at line 9 and print &quot;Here&quot; at 16<br></p>
<p dir="ltr">javap -c output of instrumented class file<br></p>
<p dir="ltr">      27: getstatic #47 // Field java/lang/System.err:Ljava/io/PrintStream;</p>
<p dir="ltr">      30: ldc #23 // String Here</p>
<p dir="ltr">      32: invokevirtual #17 // Method java/io/PrintStream.println:(Ljava/lang/String;)V</p>
<p dir="ltr">      35: lload_3</p>
<p dir="ltr">      36: ldc2_w #52 // long 15l</p>
<p dir="ltr">      39: ladd</p>
<p dir="ltr">      40: ldc2_w #52 // long 15l</p>
<p dir="ltr">      43: ladd</p>
<p dir="ltr">      44: lstore_3</p>
<p dir="ltr">      45: getstatic #47 // Field java/lang/System.err:Ljava/io/PrintStream;</p>
<p dir="ltr">      48: iload_0</p>
<p dir="ltr">      49: iconst_0</p>
<p dir="ltr">      50: idiv</p>
<p dir="ltr">      51: invokevirtual #39 // Method java/io/PrintStream.println:(I)V</p>
<p dir="ltr">Here line 30 is print &quot;Here&quot; and line 50 is division. (Ignore the extra adds, they are for BL path profiling.)</p>
<p dir="ltr">I&#39;m not doing any rearrangement of instructions during Transformation. Why is this happening?<br></p>
<p dir="ltr">#java version </p>
<p dir="ltr">java version &quot;1.7.0_95&quot;</p>
<p dir="ltr">OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)</p>
<p dir="ltr">OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)<br></p>
<p dir="ltr">#javac</p>
<p dir="ltr">javac 1.7.0_95<br></p>
<p dir="ltr">#soot</p>
<p dir="ltr">soot-nightly-05082016</p>