[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