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 |
||
---|---|---|
.. | ||
ASTUtils.cpp | ||
ASTUtils.h | ||
CMakeLists.txt | ||
DeclRefExprUtils.cpp | ||
DeclRefExprUtils.h | ||
ExprSequence.cpp | ||
ExprSequence.h | ||
FixItHintUtils.cpp | ||
FixItHintUtils.h | ||
HeaderFileExtensionsUtils.cpp | ||
HeaderFileExtensionsUtils.h | ||
HeaderGuard.cpp | ||
HeaderGuard.h | ||
IncludeInserter.cpp | ||
IncludeInserter.h | ||
IncludeSorter.cpp | ||
IncludeSorter.h | ||
LexerUtils.cpp | ||
LexerUtils.h | ||
Matchers.h | ||
NamespaceAliaser.cpp | ||
NamespaceAliaser.h | ||
OptionsUtils.cpp | ||
OptionsUtils.h | ||
TypeTraits.cpp | ||
TypeTraits.h | ||
UsingInserter.cpp | ||
UsingInserter.h |