<div dir="ltr">On Wed, Aug 14, 2013 at 8:36 AM, George Kastrinis <span dir="ltr"><<a href="mailto:george.kastrinis@logicblox.com" target="_blank">george.kastrinis@logicblox.com</a>></span> wrote:<br><div class="gmail_extra">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thanks. Yeah, SourceManager::getImmediateMacroCallerLoc is what we though might help to get all the expansion stack and I think it helped in some cases. But now we have the following issue (again from the same math header!). Say you have in file a.cpp<div>

<br></div><div><div>#define __THROW throw ()</div><div><br></div><div>#define __MATHCALL(function, args)<span style="white-space:pre-wrap">       </span>\</div><div>  __MATHDECL (double,function, args)</div><div>#define __MATHDECL(type, function, args) \</div>

<div>  __MATHDECL_1(type, function, args); \</div><div>  __MATHDECL_1(type, __ ## function, args)</div><div>#define __MATHDECL_1(type, function, args) \</div><div>  extern type __MATH_PRECNAME(function) args __THROW</div>

<div><br></div><div>#define __MATH_PRECNAME(name)<span style="white-space:pre-wrap">    </span>name</div><div>#include "b.h"</div><div>#undef __MATH_PRECNAME</div><div><br></div><div>#define __MATH_PRECNAME(name)<span style="white-space:pre-wrap">   </span>name##f</div>

<div>#include "b.h"</div><div>#undef __MATH_PRECNAME</div></div><div><br></div><div>and in b.h</div><div><br></div><div>__MATHCALL (cpow, (double __x, double __y));<br></div><div><br></div><div>This will create 4 functions (cpow, __cpow, cpowf, __cpowf). Using SourceManager::getImmediateMacroCallerLoc we are able to differentiate for example cpow and __cpow. But there is still an issue with cpow and cpowf (and with __cpow and __cpowf). Those pairs have the same locations even when getting the whole expansion macro.</div>

<div><br></div><div>Is there anything we can do to handle this case?</div><div><br><br></div></div></blockquote><div><br></div><div>I think you also need to track the include stack.  SourceManager::getDecomposedIncludedLoc might be useful here.<br>
<br></div><div>-Eli <br></div></div></div></div>