<div>Hi</div><div>Recently I have faced an interesting case (spec benchmark, 471.omnetpp) while working with Clang. Following is the case</div><code><pre style="background-color:rgba(0,0,0,0.05);padding:0.2em 1em"><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">double</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">cPar::doubleValue</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">()</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">{</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">isRedirected</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">())</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> ind.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">par</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">-></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">doubleValue</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">();</font></code></div><br><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">isInput</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">()) </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">read</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">();</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'B'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> || typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'L'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">double</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)lng.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">val</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">;</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">else</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'D'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> dbl.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">val</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">;</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">else</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'T'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">fromstat</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">();</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">else</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'X'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">evaluate</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">();</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">else</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'C'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> cexpr.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">expr</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">-></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">evaluate</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">();</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">else</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">if</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> (typechar==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'F'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">return</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">argc</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(9, 136, 90)">0</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> ? ((MathFuncNoArg)func.f)() :</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">argc</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(9, 136, 90)">1</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> ? ((MathFunc1Arg) func.f)(func.p1) :</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">argc</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(9, 136, 90)">2</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> ? ((MathFunc2Args)func.f)(func.p1,func.p2) :</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">argc</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">==</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(9, 136, 90)">3</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> ? ((MathFunc3Args)func.f)(func.p1,func.p2,func.p3) :</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">((MathFunc4Args)func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">f</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">)(func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">p1</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">,func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">p2</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">,func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">p3</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">,func.</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 16, 128)">p4</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">);</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">else</span></font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">throw</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(175, 0, 219)">new</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">cException</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">(</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">this</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">,eBADCAST,typechar,</font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(163, 21, 21)">'D'</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">);</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">}</font></code></div></pre></code><div><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">Where each func.f is an indirect call and declared here:</font></div><code><pre style="background-color:rgba(0,0,0,0.05);padding:0.2em 1em"><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">struct</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> { MathFunc f; </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">int</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> argc;</font></code></div><div><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">double</span></font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> p1,p2,p3,p4; } func; </font></code><code><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 128, 0)">// F:math function</span></font></code></div></pre></code><div><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">So, clearly </font><em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">f</font></em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> is declared as </font><em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">MathFunc </font></em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">type which later dereferenced to </font><em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">MathFuncNoArg, MathFunc1Arg </font></em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">etc.</font></div><br><div>Now, in the <em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">CGCalleeInfo, </font></em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">compiler set the Decl for the Callee.</font> What I have discovered is that <em><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">Decl *Expr::getReferencedDeclOfCallee()</font></em><em> </em>returns nullptr and for that call callee set to Decl as Null from <font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">CGCallee </font><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(121, 94, 38)">CodeGenFunction::EmitCallee</span></font><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"">(</font><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""><span style="color:rgb(0, 0, 255)">const</span></font><font style="font-family:"Droid Sans Mono", monospace, monospace, "Droid Sans Fallback""> Expr *E)</font>. I beleive this is not an expected behavior because it is declared as MathFunc and it should be set as that.</div><br><div>I would like to understand why it kept like this?</div><br><br><div><signature id="local-bd5b3e99-afb0"><table cellpadding="0" cellspacing="0"><tbody><tr><td><div><strong>Mustakimur R. Khandaker</strong></div><div style="border-top:2px solid gray;padding-top:3px;margin-top:3px">Sent from Mailspring, the best free email app for work</div><div style="font-size:0.9em;min-width:250px;max-width:300px;margin-top:4px;padding-top:4px"><div><div><span>E // </span><a href="https://link.getmailspring.com/link/1536873021.local-d697679c-88c7-v1.4.2-f587b7b7@getmailspring.com/0?redirect=mailto%3Amrk15e%40my.fsu.edu&recipient=Y2ZlLWRldkBsaXN0cy5sbHZtLm9yZw%3D%3D">mrk15e@my.fsu.edu</a></div><div><span style="margin-right:8px"><span>P // </span><a href="tel:8509993635">8509993635</a></span></div><div><span>W // </span><a href="https://link.getmailspring.com/link/1536873021.local-d697679c-88c7-v1.4.2-f587b7b7@getmailspring.com/1?redirect=http%3A%2F%2Fww2.cs.fsu.edu%2F~khandake%2F&recipient=Y2ZlLWRldkBsaXN0cy5sbHZtLm9yZw%3D%3D">http://ww2.cs.fsu.edu/~khandake/</a></div><div></div></div></div></td></tr></tbody></table></signature></div><img class="mailspring-open" alt="Open Tracking" width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmailspring.com/open/1536873021.local-d697679c-88c7-v1.4.2-f587b7b7@getmailspring.com?recipient=Y2ZlLWRldkBsaXN0cy5sbHZtLm9yZw%3D%3D">