diff options
author | Alexander Kornienko <alexfh@google.com> | 2015-02-05 12:49:07 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2015-02-05 12:49:07 +0000 |
commit | dd2dad0d24f0458b2fdbb4bfa5fc256f9eda13ea (patch) | |
tree | 1741dd2de1269ae0b768e7bf08310614f99568a3 /clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp | |
parent | 30029c6b5854ce50bdcf7446d64bbbf817a69bee (diff) | |
download | bcm5719-llvm-dd2dad0d24f0458b2fdbb4bfa5fc256f9eda13ea.tar.gz bcm5719-llvm-dd2dad0d24f0458b2fdbb4bfa5fc256f9eda13ea.zip |
[clang-tidy] Detect dependent initializer_lists in google-explicit-constructor.
Summary:
Detect constructors taking a single std::initializer_list even when it
is instantiation-dependent.
Reviewers: djasper
Reviewed By: djasper
Subscribers: curdeius, cfe-commits
Differential Revision: http://reviews.llvm.org/D7431
llvm-svn: 228289
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
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 d198db7af65..c9646765d07 100644 --- a/clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp +++ b/clang-tools-extra/test/clang-tidy/google-explicit-constructor.cpp @@ -49,7 +49,7 @@ struct A { // CHECK-FIXES: {{^ }}explicit A(int x1) {} A(double x2, double y = 3.14) {} - // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: single-argument constructors must be explicit + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: single-argument constructors // CHECK-FIXES: {{^ }}explicit A(double x2, double y = 3.14) {} }; @@ -63,11 +63,11 @@ struct B { // CHECK-FIXES: {{^ }}B(::std::initializer_list<double> list4) {} explicit B(const ::std::initializer_list<char> &list5) {} - // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: initializer-list constructor should not be declared explicit [google-explicit-constructor] + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: initializer-list constructor // CHECK-FIXES: {{^ }}B(const ::std::initializer_list<char> &list5) {} explicit B(::std::initializer_list<char> &&list6) {} - // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: initializer-list constructor should not be declared explicit [google-explicit-constructor] + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: initializer-list constructor // CHECK-FIXES: {{^ }}B(::std::initializer_list<char> &&list6) {} }; @@ -79,6 +79,27 @@ struct C { C(initializer_list<unsigned> &&list3) {} }; +template <typename T> +struct C2 { + C2(initializer_list<int> list1) {} + C2(const initializer_list<unsigned> &list2) {} + C2(initializer_list<unsigned> &&list3) {} + + explicit C2(initializer_list<double> list4) {} + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: initializer-list constructor + // CHECK-FIXES: {{^ }}C2(initializer_list<double> list4) {} +}; + +template <typename T> +struct C3 { + C3(initializer_list<T> list1) {} + C3(const std::initializer_list<T*> &list2) {} + C3(::std::initializer_list<T**> &&list3) {} + + template <typename U> + C3(initializer_list<U> list3) {} +}; + struct D { template <typename T> explicit D(T t) {} @@ -86,6 +107,14 @@ struct D { template <typename T> struct E { + E(T *pt) {} + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: single-argument constructors + // CHECK-FIXES: {{^ }}explicit E(T *pt) {} + template <typename U> + E(U *pu) {} + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: single-argument constructors + // CHECK-FIXES: {{^ }}explicit E(U *pu) {} + explicit E(T t) {} template <typename U> explicit E(U u) {} |