forked from OSchip/llvm-project
b4ab4b6317
Summary: The following Objective-C code currently incorrectly triggers clang-tidy's performance-unnecessary-value-param check: ``` % cat /tmp/performance-unnecessary-value-param-arc.m void foo(id object) { } clang-tidy /tmp/performance-unnecessary-value-param-arc.m -checks=-\*,performance-unnecessary-value-param -- -xobjective-c -fobjc-abi-version=2 -fobjc-arc 1 warning generated. /src/llvm/tools/clang/tools/extra/test/clang-tidy/performance-unnecessary-value-param-arc.m:10:13: warning: the parameter 'object' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param] void foo(id object) { } ~~ ^ const & ``` This is wrong for a few reasons: 1) Objective-C doesn't have references, so `const &` is not going to help 2) ARC heavily optimizes the "expensive" copy which triggers the warning This fixes the issue by disabling the warning for non-C++, as well as disabling it for objects under ARC memory management for Objective-C++. Fixes https://bugs.llvm.org/show_bug.cgi?id=32075 Test Plan: New tests added. Ran tests with `make -j12 check-clang-tools`. Reviewers: alexfh, hokein Reviewed By: hokein Subscribers: stephanemoore, klimek, xazax.hun, cfe-commits, Wizard Differential Revision: https://reviews.llvm.org/D42812 llvm-svn: 324097 |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
FasterStringFindCheck.cpp | ||
FasterStringFindCheck.h | ||
ForRangeCopyCheck.cpp | ||
ForRangeCopyCheck.h | ||
ImplicitConversionInLoopCheck.cpp | ||
ImplicitConversionInLoopCheck.h | ||
InefficientAlgorithmCheck.cpp | ||
InefficientAlgorithmCheck.h | ||
InefficientStringConcatenationCheck.cpp | ||
InefficientStringConcatenationCheck.h | ||
InefficientVectorOperationCheck.cpp | ||
InefficientVectorOperationCheck.h | ||
MoveConstArgCheck.cpp | ||
MoveConstArgCheck.h | ||
MoveConstructorInitCheck.cpp | ||
MoveConstructorInitCheck.h | ||
NoexceptMoveConstructorCheck.cpp | ||
NoexceptMoveConstructorCheck.h | ||
PerformanceTidyModule.cpp | ||
TypePromotionInMathFnCheck.cpp | ||
TypePromotionInMathFnCheck.h | ||
UnnecessaryCopyInitialization.cpp | ||
UnnecessaryCopyInitialization.h | ||
UnnecessaryValueParamCheck.cpp | ||
UnnecessaryValueParamCheck.h |