================ @@ -273,6 +273,18 @@ void UnnecessaryCopyInitialization::registerMatchers(MatchFinder *Finder) { Finder->addMatcher(LocalVarCopiedFrom(declRefExpr( to(varDecl(hasLocalStorage()).bind(OldVarDeclId)))), this); + + auto DeclRefToConstVar = + declRefExpr(to(varDecl(anyOf(hasType(isConstQualified()), + hasType(references(isConstQualified())))) + .bind(OldVarDeclId))); + Finder->addMatcher( + LocalVarCopiedFrom( + memberExpr(hasObjectExpression(anyOf(hasDescendant(DeclRefToConstVar), ---------------- HerrCai0907 wrote:
I think the current matcher is not correct. `hasDescendant` is too wide here. Maybe a self defined matcher to remove `CXXMemberCallExpr` recursively would be better. ```c++ Struct &makeStruct(Struct const &); void f(ExpensiveToCopyType const &); void f(Struct const &s) { auto t1 = makeStruct(s).Member; // false positive auto t2 = s.Member; // good f(t1); f(t2); } ``` https://github.com/llvm/llvm-project/pull/151936 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits