[cfe-dev] Determining if a UsingDecl/UsingShadowDecl was used in the instantiation of a variable.

David Blaikie via cfe-dev cfe-dev at lists.llvm.org
Mon Oct 28 13:08:42 PDT 2019


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> 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
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20191028/78278ec0/attachment.html>


More information about the cfe-dev mailing list