summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2014-11-30 19:41:41 +0000
committerAlexander Kornienko <alexfh@google.com>2014-11-30 19:41:41 +0000
commitad5074df0c1b9dfce7ff7094ca2b7ec7d4b2167f (patch)
tree65859833e14ff364dc49494c396ef7c3cab39faf /clang-tools-extra
parent7432a64dcb0abf5282cb82420b0dd47db28facde (diff)
downloadbcm5719-llvm-ad5074df0c1b9dfce7ff7094ca2b7ec7d4b2167f.tar.gz
bcm5719-llvm-ad5074df0c1b9dfce7ff7094ca2b7ec7d4b2167f.zip
[clang-tidy] google-explicit-constructor: don't match in template instantiations
This helps avoiding false positives related to the recently added std::initializer_list<> handling. llvm-svn: 222981
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp3
-rw-r--r--clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp18
2 files changed, 20 insertions, 1 deletions
diff --git a/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp b/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp
index a07902e5293..3960dac6842 100644
--- a/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp
+++ b/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp
@@ -19,7 +19,8 @@ namespace clang {
namespace tidy {
void ExplicitConstructorCheck::registerMatchers(MatchFinder *Finder) {
- Finder->addMatcher(constructorDecl().bind("ctor"), this);
+ Finder->addMatcher(constructorDecl(unless(isInstantiated())).bind("ctor"),
+ this);
}
// Looks for the token matching the predicate and returns the range of the found
diff --git a/clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp b/clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp
index fec8debd436..d198db7af65 100644
--- a/clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp
+++ b/clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp
@@ -78,3 +78,21 @@ struct C {
C(const initializer_list<unsigned> &list2) {}
C(initializer_list<unsigned> &&list3) {}
};
+
+struct D {
+ template <typename T>
+ explicit D(T t) {}
+};
+
+template <typename T>
+struct E {
+ explicit E(T t) {}
+ template <typename U>
+ explicit E(U u) {}
+};
+
+void f(std::initializer_list<int> list) {
+ D d(list);
+ E<decltype(list)> e(list);
+ E<int> e2(list);
+}
OpenPOWER on IntegriCloud