[cfe-dev] How to lookup a name from a specific expression's location?
Oleksandr Koval via cfe-dev
cfe-dev at lists.llvm.org
Sat Oct 3 05:40:44 PDT 2020
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201003/dd9369fd/attachment.html>
More information about the cfe-dev
mailing list