summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy/checkers/bugprone-branch-clone-if-constexpr-template.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/checkers/bugprone-branch-clone-if-constexpr-template.cpp')
-rw-r--r--clang-tools-extra/test/clang-tidy/checkers/bugprone-branch-clone-if-constexpr-template.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone-branch-clone-if-constexpr-template.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone-branch-clone-if-constexpr-template.cpp
new file mode 100644
index 00000000000..382330139c8
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone-branch-clone-if-constexpr-template.cpp
@@ -0,0 +1,58 @@
+// RUN: %check_clang_tidy %s bugprone-branch-clone %t -- -- -std=c++17
+
+void handle(int);
+
+template <unsigned Index>
+void shouldFail() {
+ if constexpr (Index == 0) {
+ // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: repeated branch in conditional chain [bugprone-branch-clone]
+ handle(0);
+ } else if constexpr (Index == 1) {
+ handle(1);
+ } else {
+ handle(0);
+ }
+}
+
+template <unsigned Index>
+void shouldPass() {
+ if constexpr (Index == 0) {
+ handle(0);
+ } else if constexpr (Index == 1) {
+ handle(1);
+ } else {
+ handle(2);
+ }
+}
+
+void shouldFailNonTemplate() {
+ constexpr unsigned Index = 1;
+ if constexpr (Index == 0) {
+ // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: repeated branch in conditional chain [bugprone-branch-clone]
+ handle(0);
+ } else if constexpr (Index == 1) {
+ handle(1);
+ } else {
+ handle(0);
+ }
+}
+
+void shouldPassNonTemplate() {
+ constexpr unsigned Index = 1;
+ if constexpr (Index == 0) {
+ handle(0);
+ } else if constexpr (Index == 1) {
+ handle(1);
+ } else {
+ handle(2);
+ }
+}
+
+void run() {
+ shouldFail<0>();
+ shouldFail<1>();
+ shouldFail<2>();
+ shouldPass<0>();
+ shouldPass<1>();
+ shouldPass<2>();
+}
OpenPOWER on IntegriCloud