[cfe-dev] Preserving function declarations from headers to be able to iterate over them in IR

Mikael Lepistö elhigu at gmail.com
Tue Jun 11 23:07:44 PDT 2013


Hello,

Is there a way to say to clang that we should preserve all declarations in 
compile module, even if they are not used anywhere in program?

Case where we would need that is when we have original program with 
overloaded functions e.g

int foo(int *bar);
int foo(float *bar);
void foo_replacement(int *bar, int *min, int *max);
void foo_replacement(float *bar, float *min, float *max);

float ret;

int main () {
  return foo(&ret);
}

When we compile this to IR only int foo(float *bar); declaration is preserved. 
Afterwards we would like to replace call of foo -> foo_replacement.

But in IR we don't have declarations to those functions anymore and we don't
have mangler to be able to generate correct function name for replacement
functions and arguments this becomes a problem.

We wouldn't like to have all function implementations there yet, because 
compiling would get too slow. We just like to link them in afterwards.

If we would have original declarations left in IR we could just iterate over all
function declarations and do mapping between  
int foo(int *bar) -> int foo_replacement(int *bar, int *min, int *max) etc.

Thanks, Mikael Lepistö




More information about the cfe-dev mailing list