[PATCH] D146288: clang-tidy: Detect use-after-move in CXXCtorInitializer
Piotr Zegar via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 20 08:30:09 PDT 2023
PiotrZSL added inline comments.
================
Comment at: clang-tools-extra/clang-tidy/bugprone/UseAfterMoveCheck.cpp:400
void UseAfterMoveCheck::registerMatchers(MatchFinder *Finder) {
auto CallMoveMatcher =
+ callExpr(
----------------
MarcoFalke wrote:
> PiotrZSL wrote:
> > This is correct but consider this:
> >
> > ```
> > auto TryEmplaceMatcher = cxxMemberCallExpr(callee(cxxMethodDecl(hasName("try_emplace"))));
> >
> > auto CallMoveMatcher =
> > callExpr(argumentCountIs(1), // because matching this will be faster than checking name.
> > callee(functionDecl(hasName("::std::move"))),
> > unless(inDecltypeOrTemplateArg()),
> > expr().bind("call-move"),
> > unless(hasParent(TryEmplaceMatcher)),
> > anyOf(hasAncestor(compoundStmt(hasParent(lambdaExpr().bind("containing-lambda")))),
> > hasAncestor(functionDecl(anyOf(cxxConstructorDecl(hasAnyConstructorInitializer(
> > withInitializer(expr(
> > anyOf(equalsBounNode("call-move"),
> > hasDescendant(equalsBounNode("call-move")))
> > ).bind("containing-ctor-init-stmt")
> > ))
> > ).bind("containing-ctor"),
> > functionDecl().bind("containing-func")))))
> > );
> > ```
> >
> I get:
>
> ```
> error: no matching function for call to object of type 'const internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher>'
> anyOf(equalsBoundNode("call-move"),hasDescendant(equalsBoundNode("call-move")))
> ^~~~~~~~~~~~~
> ./llvm-project/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:1491:3: note: candidate template ignored: could not match 'Matcher' against 'PolymorphicMatcher'
> operator()(const Matcher<T> &InnerMatcher) const {
> ^
> ./llvm-project/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:1498:3: note: candidate template ignored: could not match 'MapAnyOfHelper' against 'PolymorphicMatcher'
> operator()(const MapAnyOfHelper<T...> &InnerMatcher) const {
> ^
> 1 error generated.
> ```
yee, forgot type: `hasDescendant(callExpr(equalsBoundNode("call-move"))))`
+- something like this..
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D146288/new/
https://reviews.llvm.org/D146288
More information about the cfe-commits
mailing list