================
@@ -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

Reply via email to