<div dir="ltr"><div><div><div><div><div><div>I would think (in fact, I _KNOW_) that the compiler already does the transformation to temp1 = foo(42) and temp2 = foo(temp1) already. So it'd just be a case, at the LLVM-IR level at least, to insert some code to inspect temp1 and temp2.<br><br></div>Of course, it may be a slightly more interesting challenge to find your "interesting functions" (particularly if interesting functions aren't a well defined set of functions) when looking at the LLVM-IR - including the fact that for example member functions gets mangled during compilation.<br><br></div>Also interesting/challenging is function pointers:<br><br></div>    pf = foo;<br></div>    var = 42 + pf(pf(42));<br><br></div>Consider where pf is passed into the function you're currently looking at, or comes from a table of function pointers, with a non-constant determining the index into the table.</div><div>A similar problem is of course virtual function calls - they are just function pointer tables after all [but the table itself is the variable part there, rather than the index, unless we're talking virtual member function pointers, which isn't a common creature by any means]<br></div><div><br>--<br></div>Mats<br><div><div><div><div><div><br><br></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 7 August 2017 at 19:15, Marcel Schaible via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everyone,<br>
<br>
I need some advice for the following intended transformation:<br>
<br>
int foo(int p) { return 2*p; }<br>
<br>
int bar (void) {<br>
<br>
    int var = 42 + foo(foo(42)); /*1*/<br>
<br>
    return var;<br>
<br>
}<br>
<br>
I want to check the return value from foo:<br>
<br>
int bar (void) {<br>
<br>
    int temp1 = foo(42);<br>
<br>
    int temp2 foo(temp1);<br>
<br>
    // perform some checks on temp1 and temp2<br>
<br>
    int var = 42 + temp2;<br>
<br>
    return var;<br>
<br>
}<br>
<br>
How should I dissect and translate the expr /*1*/ with a Rewriter?<br>
<br>
Thanks for your help<br>
<br>
Marcel<br>
<br>
(Greetings from the Black Forest in Germany ;- ) )<br>
<br>
______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br></div>