================
@@ -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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits