<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 class="" style="white-space:pre"> </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 class="" style="white-space:pre">      </span>name</div><div>#include "b.h"</div><div>#undef __MATH_PRECNAME</div><div><br></div><div>#define __MATH_PRECNAME(name)<span class="" style="white-space:pre">     </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></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 13, 2013 at 6:13 PM, Eli Friedman <span dir="ltr"><<a href="mailto:eli.friedman@gmail.com" target="_blank">eli.friedman@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div class="h5">On Tue, Aug 13, 2013 at 11:17 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-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Hi all,</span><div style="font-family:arial,sans-serif;font-size:13px">

<br></div><div style="font-family:arial,sans-serif;font-size:13px">We are working on a Clang plugin, and we wan to have a way to uniquely identify every declaration in a C++ program. We tried using the following.</div>
<div style="font-family:arial,sans-serif;font-size:13px">(presumed location start, presumed location end, spelling location start, spelling location end, declaration kind)</div><div style="font-family:arial,sans-serif;font-size:13px">


<br></div><div style="font-family:arial,sans-serif;font-size:13px">But we still have a problem.</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">


For example, in /usr/include/x86_64-linux-gnu/bits/cmathcalls.h, line 101 a macro called _MATHCALL is used. If you look at /usr/include/complex.h, line 65 where the macro is defined, you will see that the macro uses other macros inside and create two functions (e.g. cpowf and __cpowf)</div>


<div style="font-family:arial,sans-serif;font-size:13px"><br></div><span style="font-family:arial,sans-serif;font-size:13px">I tried using spelling locations, presumed locations, SourceManager::getExpansionLoc on the spelling location. All give the same locations for cpowf and __cpowf.</span><div style="font-family:arial,sans-serif;font-size:13px">


<br></div><div style="font-family:arial,sans-serif;font-size:13px">Is there any way to achieve what I try to do here?</div><div style="font-family:arial,sans-serif;font-size:13px"></div></div></blockquote></div><br></div>

</div></div><div class="gmail_extra">If you really need to serialize SourceLocations, you really need to encode the entire macro expansion stack.  SourceManager::getImmediateMacroCallerLoc might be helpful here.</div><span class="HOEnZb"><font color="#888888"><div class="gmail_extra">

<br></div><div class="gmail_extra">-Eli</div></font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><br>George Kastrinis<br><a href="http://gkastrinis.info/" target="_blank">http://gkastrinis.info/</a><br></div>
</div>