Hello,<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">So, looking
for type of callee (not result, but function type!) you'll obtain the<br>
real "signature" of callee and if you'll strip all pointer cast you'll<br>
obtain the "declaration" (=variadic) type of the callee.</blockquote></div><br>Maybe I misunderstood something but I just get the variadic declaration not the real "signature", like this:<br><br>const CallInst *I = dyn_cast<CallInst>(A);<br>
<br>my CallInst looks like:<br>%1 = tail call i32 (i8*, ...)* @printf(i8* noalias %0, i32 123) nounwind<br><br>const Value *Callee = I->getCalledValue();<br>my Callee is: declare i32 @printf(i8* nocapture, ...) nounwind<br>
<br>const PointerType  *PTy   = cast<PointerType>(Callee->getType());<br>I get: i32 (i8*, ...)*<br><br>const FunctionType *FTy   = cast<FunctionType>(PTy->getElementType());<br>so I get: i32 (i8*, ...)<br>
<br>The interesting for me part of the CallInst is printf(i8* noalias %0, i32 123).<br>I was diging in doxygen documentation but I really can't see the easy way to compare those instructions and again finish with reinvented (but working) wheel ;).<br>
I would really appreciate help.<br>Thanks!<br><br>Artur<br>