[cfe-dev] source-to-source transformation to insert instrumentation calls
Dmitri Gribenko
gribozavr at gmail.com
Mon Sep 24 08:50:36 PDT 2012
On Mon, Sep 24, 2012 at 6:43 PM, Jan Smets <jan.smets at alcatel-lucent.com> wrote:
> That's OK. I'm aware that I won't be 100% accurate.
OK, good to know.
> Now I just need to figure out a good location to insert the call! :)
I think that there are cases where inserting instrumentation calls
will require non-trivial rewriting. For example:
int f(int, int);
int g(int *)
int test(int *a)
{
f(*a, g(a));
}
Function argument evaluation order is unspecified, so we can not
simply insert an instrumentation call for *a before f() because *a can
be evaluated after g(a), which can change *a.
So we need to make an arbitrary decision ourselves and rewrite this to
something like:
int test(int *a)
{
int tmp1 = *a;
int tmp2 = g(a);
f(tmp1, tmp2);
}
I didn't give this much thought, but I suspect there are much more
cases like this.
Dmitri
--
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
More information about the cfe-dev
mailing list