diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-07-15 09:50:32 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-07-15 09:50:32 +0000 |
commit | 47c4d101e00953aefb071625c68f3d9ab8373e4a (patch) | |
tree | 6e1f1deaad47c6e9841c149536d1b66331dbaf0c /clang-tools-extra/test/clang-tidy/google-explicit-make-pair.cpp | |
parent | 1015f8d753904f3bba4b2f2bdbe37718dcd98cda (diff) | |
download | bcm5719-llvm-47c4d101e00953aefb071625c68f3d9ab8373e4a.tar.gz bcm5719-llvm-47c4d101e00953aefb071625c68f3d9ab8373e4a.zip |
[clang-tidy] Add a checker that removes deducible arguments from std::make_pair
Those may be incompatible with C++11 and are unnecessary. We suggest
removing the template arguments when they match the types of the make_pair
arguments or replace it with std::pair and explicit template arguments when
not.
Differential Revision: http://reviews.llvm.org/D4497
llvm-svn: 213058
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/google-explicit-make-pair.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/google-explicit-make-pair.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/google-explicit-make-pair.cpp b/clang-tools-extra/test/clang-tidy/google-explicit-make-pair.cpp new file mode 100644 index 00000000000..257fd0621c7 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/google-explicit-make-pair.cpp @@ -0,0 +1,44 @@ +// RUN: $(dirname %s)/check_clang_tidy_fix.sh %s google-build-explicit-make-pair %t +// REQUIRES: shell + +namespace std { +template <class T1, class T2> +struct pair { + pair(T1 x, T2 y) {} +}; + +template <class T1, class T2> +pair<T1, T2> make_pair(T1 x, T2 y) { + return pair<T1, T2>(x, y); +} +} + +template <typename T> +void templ(T a, T b) { + std::make_pair<T, unsigned>(a, b); +} + +void test(int i) { + std::make_pair<int, int>(i, i); +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: for C++11-compatibility, omit template arguments from make_pair +// CHECK-FIXES: std::make_pair(i, i) + + std::make_pair<unsigned, int>(i, i); +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: for C++11-compatibility, use pair directly +// CHECK-FIXES: std::pair<unsigned, int>(i, i) + + std::make_pair<int, unsigned>(i, i); +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: for C++11-compatibility, use pair directly +// CHECK-FIXES: std::pair<int, unsigned>(i, i) + +#define M std::make_pair<int, unsigned>(i, i); +M +// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: for C++11-compatibility, use pair directly +// Can't fix in macros. +// CHECK-FIXES: #define M std::make_pair<int, unsigned>(i, i); +// CHECK-FIXES-NEXT: M + + templ(i, i); + + std::make_pair(i, 1); // no-warning +} |