hanchenye-llvm-project/clang-tools-extra/clang-tidy/utils
Ben Hamilton b4ab4b6317 [clang-tidy] ObjC ARC objects should not trigger performance-unnecessary-value-param
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
2018-02-02 15:34:33 +00:00
..
ASTUtils.cpp [clang-tidy] Kill marco. No functionality change. 2018-02-02 13:39:07 +00:00
ASTUtils.h [clang-tidy] Add a new Android check "android-cloexec-socket" 2017-07-12 17:43:36 +00:00
CMakeLists.txt [clang-tidy] refactor ExprSequence out of use-after-move check 2016-12-24 12:45:07 +00:00
DeclRefExprUtils.cpp [clang-tidy] Do not trigger move fix for non-copy assignment operators in performance-unnecessary-value-param check 2017-01-19 15:51:10 +00:00
DeclRefExprUtils.h [clang-tidy] Handle constructors in performance-unnecessary-value-param 2017-01-03 12:10:44 +00:00
ExprSequence.cpp [clang-tidy] refactor ExprSequence out of use-after-move check 2016-12-24 12:45:07 +00:00
ExprSequence.h [clang-tidy] refactor ExprSequence out of use-after-move check 2016-12-24 12:45:07 +00:00
FixItHintUtils.cpp [clang-tidy] getPreviousNonCommentToken -> getPreviousToken 2017-02-06 15:46:33 +00:00
FixItHintUtils.h
HeaderFileExtensionsUtils.cpp
HeaderFileExtensionsUtils.h [clang-tidy] Unify the way IncludeStyle and HeaderFileExtesions options are used 2017-07-20 12:02:03 +00:00
HeaderGuard.cpp Spelling mistakes in comments. NFCI. 2017-03-30 13:10:33 +00:00
HeaderGuard.h [clang-tidy] Unify the way IncludeStyle and HeaderFileExtesions options are used 2017-07-20 12:02:03 +00:00
IncludeInserter.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
IncludeInserter.h
IncludeSorter.cpp Correctly classify main file includes if there is a prefix added 2017-01-12 15:31:50 +00:00
IncludeSorter.h
LexerUtils.cpp [clang-tidy] getPreviousNonCommentToken -> getPreviousToken 2017-02-06 15:46:33 +00:00
LexerUtils.h [clang-tidy] getPreviousNonCommentToken -> getPreviousToken 2017-02-06 15:46:33 +00:00
Matchers.h [clang-tidy] Implement type-based check for `gsl::owner` 2017-09-12 20:00:42 +00:00
NamespaceAliaser.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
NamespaceAliaser.h Recommit "[ClangTidy] Add UsingInserter and NamespaceAliaser" 2016-10-17 08:33:59 +00:00
OptionsUtils.cpp
OptionsUtils.h
TypeTraits.cpp [clang-tidy] ObjC ARC objects should not trigger performance-unnecessary-value-param 2018-02-02 15:34:33 +00:00
TypeTraits.h
UsingInserter.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
UsingInserter.h Recommit "[ClangTidy] Add UsingInserter and NamespaceAliaser" 2016-10-17 08:33:59 +00:00