[cfe-dev] Determining if a UsingDecl/UsingShadowDecl was used in the instantiation of a variable.
Eric Bayer via cfe-dev
cfe-dev at lists.llvm.org
Mon Oct 28 13:52:23 PDT 2019
Thanks for the answer. Damn. Yeah, that is the conclusion I was coming
to as well. We had a similar problem capturing pre-processor macros as
they really are not part of the AST. Eventually I figured out a way to
do it because I could capture data during the expansions and maintain a
data structure on the side. Unfortunately for name resolution there
seems to be no similar callback/hook.
I also had wondered if there was some stage when maybe they'd be
unresolved and I could build a data structure for later reference, but
I've still not explored that avenue.
-Eric
On 10/28/2019 1:08 PM, David Blaikie wrote:
> I don't believe that information is preserved in Clang's AST (if it
> was, we'd probably want to use it from the DWARF emission (GCC
> judiciously emits only referenced alias directives, whereas clang just
> emits them all, unfortunately) - and also to power a -Wunused... hmm,
> I thought GCC had a warning for unused using directives, but I can't
> seem to reproduce that now, so maybe I hallucinated).
>
> On Tue, Oct 22, 2019 at 2:02 PM Eric Bayer via cfe-dev
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
> Hi,
>
> I have a plugin I'm working on a clang plugin where we need to
> determine all the things used in the creation of a piece of code.
> Right now we have a situation as follows:
>
> namespace X { class Y { enum Z { A=0, B, C }; }; };
> using X::Y;
>
> void MyFunc() {
> Y::Z q;
> ...
> }
>
> What we currently do is traverse the whole of MyFunc looking for
> referenced elements using VisitStmt(). The problem I have is that
> I can't find any way to determine that "using X::Y;" was used and
> that it was involved in resolving "Y::Z" to "X::Y::Z" in the
> creation of "q". This has not been a problem for all sorts of
> sugar (like typedefs, type aliases, etc), but I am beside myself
> to find a way in this case. Is there any way to do this? I'm even
> interested if it's a sort of "long way around" solution. It's
> surprising to me that this has been this hard... there have been
> breadcrumbs for every other piece of syntactic sugar.
>
> Thanks in advance,
>
> -Eric
>
> PS - I thought I had found some clues, but they only seemed to
> work for functions in one case (DeclRefExpr), and templates in
> another (getInstantiatedFromUsingDecl()).
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-dev&data=02%7C01%7Cebayer%40vmware.com%7Cfcbe32289d944707431608d75be2a86b%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637078901357964774&sdata=XVbk5ITcs0GRewR5LqgwpXZ6xYulIfZFXVpMt7O8ApY%3D&reserved=0>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20191028/7a42ddfe/attachment.html>
More information about the cfe-dev
mailing list