<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.ydpd127b775apple-tab-span
        {mso-style-name:ydpd127b775apple-tab-span;}
span.E-MailFormatvorlage20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">Hallo Jack,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">As you can see in the jimple code there is an assignment<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Helvetica",sans-serif">        tmp$15916637 = (java.awt.Graphics) tmp$713250488;</span><span style="font-family:"Calibri",sans-serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-family:"Calibri",sans-serif;color:#1F497D">which means that these two references points to the same object.<o:p></o:p></span></a></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">Soot creates jimple a few steps:
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">the first step is to produce typeless jimple from java byte code.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">After generating typeless jimple code, it splits the variables according to definition-use chains.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">Renaming the reference as in the jimple code can prevent local variables being reused to different types.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">Since in typeless jimple code bad assignment can cause type conflicts as in the following example:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:"Calibri",sans-serif;color:#1F497D">o=”hello”;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:"Calibri",sans-serif;color:#1F497D">string=o;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:"Calibri",sans-serif;color:#1F497D">o=1;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:"Calibri",sans-serif;color:#1F497D">int=o;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">In this typeless example the variable o is used as both a string and a int.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">In your jave code 2<sup>nd</sup> line defines g and 3<sup>rd</sup> line uses g as parameter, so renaming happens.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">Best,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1F497D">Linghui
<o:p></o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Von:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Soot-list [mailto:soot-list-bounces@CS.McG</span><span lang="DE" style="font-size:11.0pt;font-family:"Calibri",sans-serif">ill.CA]
<b>Im Auftrag von </b>Jack Traror<br>
<b>Gesendet:</b> Donnerstag, 24. August 2017 10:46<br>
<b>An:</b> soot-list@CS.McGill.CA<br>
<b>Betreff:</b> [Soot-list] extra temp variables in jimple code<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:8.0pt;margin-left:0cm">
<span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Hello</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:8.0pt;margin-left:0cm">
<span style="font-size:11.0pt;font-family:"Calibri",sans-serif">In the jimple code which is in the end of this message, tmp$713250488 represents the variable g defined at the 2nd line in the following test case. However, this variable changes to tmp$15916637
 at the 3rd line. Why is that happening?</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p> </o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas;color:#646464">@Test</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span style="font-size:10.0pt;font-family:Consolas">
<b><span style="color:#7F0055">void</span></b> testBarcodeIsDrawnAtOriginForZeroZeroDraw()
<b><span style="color:#7F0055">throws</span></b> Exception {</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas">BarcodeMock
<span style="color:#6A3E3E">barcode</span> = <b><span style="color:#7F0055">new</span></b> BarcodeMock(<span style="color:#2A00FF">"12345"</span>);</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas">GraphicsMock
<span style="color:#6A3E3E">g</span> = <b><span style="color:#7F0055">new</span></b> GraphicsMock();// 2nd line</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">barcode</span><span style="font-size:10.0pt;font-family:Consolas">.paintComponent(<span style="color:#6A3E3E">g</span>);<span class="ydpd127b775apple-tab-span">
</span>// 3rd line<span class="ydpd127b775apple-tab-span"> </span></span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><i><span style="font-size:10.0pt;font-family:Consolas">assertEquals</span></i><span style="font-size:10.0pt;font-family:Consolas">(0, (<b><span style="color:#7F0055">int</span></b>)
<span style="color:#6A3E3E">g</span>.getModifiedBounds().getX());</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><i><span style="font-size:10.0pt;font-family:Consolas">assertEquals</span></i><span style="font-size:10.0pt;font-family:Consolas">(0, (<b><span style="color:#7F0055">int</span></b>)
<span style="color:#6A3E3E">g</span>.getModifiedBounds().getY());</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:8.0pt;margin-left:0cm">
<span style="font-size:10.0pt;font-family:Consolas">}</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">protected</span></b><span style="font-size:10.0pt;font-family:Consolas">
<b><span style="color:#7F0055">void</span></b> paintComponent(java.awt.Graphics <span style="color:#6A3E3E">
g</span>) {</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;text-indent:35.4pt"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">super</span></b><span style="font-size:10.0pt;font-family:Consolas">.paintComponent(<span style="color:#6A3E3E">g</span>);</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;text-indent:35.4pt"><span style="font-size:10.0pt;font-family:Consolas">Insets
<span style="color:#6A3E3E">insets</span> = getInsets();</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;text-indent:35.4pt"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">try</span></b><span style="font-size:10.0pt;font-family:Consolas"> {</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:0cm;margin-left:35.4pt;margin-bottom:.0001pt;text-indent:35.4pt">
<span style="font-size:10.0pt;font-family:Consolas">draw((Graphics2D) <span style="color:#6A3E3E">
g</span>, <span style="color:#6A3E3E">insets</span>.<span style="color:#0000C0">left</span>,
<span style="color:#6A3E3E">insets</span>.<span style="color:#0000C0">top</span>);</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas">}
<b><span style="color:#7F0055">catch</span></b> (OutputException <span style="color:#6A3E3E">
e</span>) {</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:0cm;margin-left:35.4pt;margin-bottom:.0001pt;text-indent:35.4pt">
<span style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">// Don't draw anything</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;text-indent:35.4pt"><span style="font-size:10.0pt;font-family:Consolas">}</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas">}</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p> </o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">class</span></b><span style="font-size:10.0pt;font-family:Consolas"> GraphicsMock<b><span style="color:#7F0055"> extends</span></b> java.awt.Graphics2D
 {</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas">...</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:10.0pt;font-family:Consolas">}</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif">public void testBarcodeIsDrawnAtOriginForZeroZeroDraw() throws java.lang.Exception
<br>
    { <br>
        net.sourceforge.barbecue.BarcodeTest this; <br>
        java.awt.Rectangle $r2, $r3; <br>
        double $d0, $d1; <br>
        int $i0, $i1; <br>
        net.sourceforge.barbecue.BarcodeTest$BarcodeMock tmp$1950524369; <br>
        net.sourceforge.barbecue.GraphicsMock tmp$713250488; <br>
        java.awt.Graphics tmp$15916637; <br>
<br>
        this := @this: net.sourceforge.barbecue.BarcodeTest; <br>
<br>
        tmp$1950524369 = new net.sourceforge.barbecue.BarcodeTest$BarcodeMock; <br>
<br>
        specialinvoke tmp$1950524369.<net.sourceforge.barbecue.BarcodeTest$BarcodeMock: void <init>(net.sourceforge.barbecue.BarcodeTest,java.lang.String)>(this, "12345");
<br>
<br>
        tmp$713250488 = new net.sourceforge.barbecue.GraphicsMock; <br>
<br>
        specialinvoke tmp$713250488.<net.sourceforge.barbecue.GraphicsMock: void <init>()>();
<br>
<br>
        tmp$15916637 = (java.awt.Graphics) tmp$713250488; <br>
<br>
        virtualinvoke tmp$1950524369.<net.sourceforge.barbecue.BarcodeTest$BarcodeMock: void paintComponent(java.awt.Graphics)>(tmp$15916637);
<br>
<br>
        $r2 = virtualinvoke tmp$713250488.<net.sourceforge.barbecue.GraphicsMock: java.awt.Rectangle getModifiedBounds()>();
<br>
<br>
        $d0 = virtualinvoke $r2.<java.awt.Rectangle: double getX()>(); <br>
<br>
        $i0 = (int) $d0; <br>
<br>
        staticinvoke <net.sourceforge.barbecue.BarcodeTest: void assertEquals(int,int)>(0, $i0);
<br>
<br>
        $r3 = virtualinvoke tmp$713250488.<net.sourceforge.barbecue.GraphicsMock: java.awt.Rectangle getModifiedBounds()>();
<br>
<br>
        $d1 = virtualinvoke $r3.<java.awt.Rectangle: double getY()>(); <br>
<br>
        $i1 = (int) $d1; <br>
<br>
        staticinvoke <net.sourceforge.barbecue.BarcodeTest: void assertEquals(int,int)>(0, $i1);
<br>
<br>
        return; <br>
    } <br>
<br>
<o:p></o:p></span></p>
</div>
</div>
</body>
</html>