[PATCH] D139087: [include-cleaner] Handle base class member access from derived class.
Viktoriia Bakalova via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 2 01:43:59 PST 2022
VitaNuo marked an inline comment as done.
VitaNuo added inline comments.
================
Comment at: clang-tools-extra/include-cleaner/lib/WalkAST.cpp:65
+ Expr *BE = E->getBase()->IgnoreImpCasts();
+ RecordDecl *RD = BE->getType()->getAsRecordDecl();
+ report(E->getMemberLoc(), RD);
----------------
hokein wrote:
> This is not safe, we can get a nullptr if this type is not a normal `RecordType`.
>
> I think there are more cases we need to handle:
> 1) pointer type (`Derived *`)
> 2) reference type (`Derived &`)
> 3) a dependent type
>
> For the 3), some code like `std::vector<T>().size()`, it is tricky -- because we can't get any decl from a dependent type, we need some heuristics (in clangd we have some bits), we don't need to do that in this patch.
>
> In the code implementation, we should add a dedicated `handleType(QualType)` helper to handle all these cases, so `VisitMemberExpr`, `VisitCXXDependentScopeMemberExpr` callbacks can just dispatch the type to this helper.
Ok, added pointer types. Reference types seem to be working already. Added a FIXME for dependent members.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139087/new/
https://reviews.llvm.org/D139087
More information about the cfe-commits
mailing list