summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/utils
diff options
context:
space:
mode:
authorBen Hamilton <benhamilton@google.com>2018-02-02 15:34:33 +0000
committerBen Hamilton <benhamilton@google.com>2018-02-02 15:34:33 +0000
commitb4ab4b631717779e7fc4787b7cbf36b76b32e346 (patch)
treee34c262c5a5ee6232b844c60b7ce92dbc73f48d7 /clang-tools-extra/clang-tidy/utils
parent24656332342583c1222d776b0174fd7f2178d9b7 (diff)
downloadbcm5719-llvm-b4ab4b631717779e7fc4787b7cbf36b76b32e346.tar.gz
bcm5719-llvm-b4ab4b631717779e7fc4787b7cbf36b76b32e346.zip
[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
Diffstat (limited to 'clang-tools-extra/clang-tidy/utils')
-rw-r--r--clang-tools-extra/clang-tidy/utils/TypeTraits.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
index 6dd4141ba70..2cdc506476b 100644
--- a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
+++ b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
@@ -45,7 +45,8 @@ llvm::Optional<bool> isExpensiveToCopy(QualType Type,
return llvm::None;
return !Type.isTriviallyCopyableType(Context) &&
!classHasTrivialCopyAndDestroy(Type) &&
- !hasDeletedCopyConstructor(Type);
+ !hasDeletedCopyConstructor(Type) &&
+ !Type->isObjCLifetimeType();
}
bool recordIsTriviallyDefaultConstructible(const RecordDecl &RecordDecl,
OpenPOWER on IntegriCloud