diff options
author | Mads Ravn <madsravn@gmail.com> | 2016-05-23 18:15:40 +0000 |
---|---|---|
committer | Mads Ravn <madsravn@gmail.com> | 2016-05-23 18:15:40 +0000 |
commit | dfa3b3d3eeac02fd91a3cf36c10c0cbf6b74a521 (patch) | |
tree | dcaddb3e08572bcaec20cd9f698f7b689561742e | |
parent | fa2f307c54f1c5650473967a9533e40562a1bef2 (diff) | |
download | bcm5719-llvm-dfa3b3d3eeac02fd91a3cf36c10c0cbf6b74a521.tar.gz bcm5719-llvm-dfa3b3d3eeac02fd91a3cf36c10c0cbf6b74a521.zip |
Commiting for http://reviews.llvm.org/D20365
llvm-svn: 270472
-rw-r--r-- | clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp | 6 | ||||
-rw-r--r-- | clang-tools-extra/test/clang-tidy/modernize-pass-by-value.cpp | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp index c727deb7969..31a1d96320e 100644 --- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp @@ -181,6 +181,12 @@ void PassByValueCheck::check(const MatchFinder::MatchResult &Result) { if (!paramReferredExactlyOnce(Ctor, ParamDecl)) return; + + // If the parameter is trivial to copy, don't move it. Moving a trivivally + // copyable type will cause a problem with modernize-pass-by-value + if (ParamDecl->getType().isTriviallyCopyableType(*Result.Context)) + return; + auto Diag = diag(ParamDecl->getLocStart(), "pass by value and use std::move"); // Iterate over all declarations of the constructor. diff --git a/clang-tools-extra/test/clang-tidy/modernize-pass-by-value.cpp b/clang-tools-extra/test/clang-tidy/modernize-pass-by-value.cpp index f981bf3f1fc..e4c97317b3f 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-pass-by-value.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-pass-by-value.cpp @@ -194,3 +194,9 @@ struct S { Movable M; }; +// Test that types that are trivially copyable will not use std::move. This will +// cause problems with misc-move-const-arg, as it will revert it. +struct T { + std::array<int, 10> a_; + T(std::array<int, 10> a) : a_(a) {} +}; |