[cfe-dev] How to lookup a name from a specific expression's location?
David Blaikie via cfe-dev
cfe-dev at lists.llvm.org
Sat Oct 3 19:12:36 PDT 2020
I /believe/ that's not entirely possible in clang (DeclContexts are not
preserved) - though I guess clangd does /something/ to try to get
good-enough name lookup from arbitrary locations (maybe it reparses the
code to achieve this? Not sure)
On Sat, Oct 3, 2020 at 6:06 PM Oleksandr Koval via cfe-dev <
cfe-dev at lists.llvm.org> wrote:
> Hi, I'm writing a check that detects and removes redundant `this->` usage.
> Finding explicit `this->` was simple, now I want to check whether it's safe
> to remove it. My main concern is such case:
>
> struct X{
> void f(int x){
> // without `this->` will use parameter
> this->x++;
>
> // can remove `this->` because
> // local `y` is not visible yet
> this->y++;
> y++;
>
> int y;
> y++;
> }
> int x;
> int y;};
>
> I need to know whether a specific name(function or variable) will resolve
> to the same declaration without `this->` part. My matcher is
> *memberExpr(has(cxxThisExpr()))*, I bind MemberExpr and CXXThisExpr, I
> can rewrite matcher to also bind enclosing CXXMethodDecl. As I understand,
> simple enumeration of parameter/local variable names won't work(as in case
> with `y`) because of lookup/visibility rules. Is there some `lookup()`
> function whose result I can compare against the declaration of original
> function/variable? I found Sema::LookupName() but can't figure out how to
> get Scope of the found expression. Can you give me an example please?
>
> --
> Regards,
> Oleksandr Koval.
> _______________________________________________
> 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/20201003/65125fcf/attachment.html>
More information about the cfe-dev
mailing list