Index: clang-tidy/performance/UnnecessaryCopyInitialization.cpp =================================================================== --- clang-tidy/performance/UnnecessaryCopyInitialization.cpp +++ clang-tidy/performance/UnnecessaryCopyInitialization.cpp @@ -56,7 +56,7 @@ auto localVarCopiedFrom = [](const internal::Matcher &CopyCtorArg) { return compoundStmt( - forEachDescendant( + forEachDescendant(declStmt(hasSingleDecl( varDecl(hasLocalStorage(), hasType(matchers::isExpensiveToCopy()), hasInitializer(cxxConstructExpr( @@ -64,8 +64,7 @@ isCopyConstructor())), hasArgument(0, CopyCtorArg)) .bind("ctorCall"))) - .bind("newVarDecl"))) - .bind("blockStmt"); + .bind("newVarDecl"))))).bind("blockStmt"); }; Finder->addMatcher( Index: test/clang-tidy/performance-unnecessary-copy-initialization.cpp =================================================================== --- test/clang-tidy/performance-unnecessary-copy-initialization.cpp +++ test/clang-tidy/performance-unnecessary-copy-initialization.cpp @@ -338,3 +338,8 @@ WeirdCopyCtorType neg_weird_1(orig, false); WeirdCopyCtorType neg_weird_2(orig, true); } + +void NegativeMultiDeclStmt() { + ExpensiveToCopyType orig; + ExpensiveToCopyType copy = orig, copy2; +}