189a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-branch-clone %t -- -- -std=c++17 289a1d03eSRichard 389a1d03eSRichard void handle(int); 489a1d03eSRichard 589a1d03eSRichard template <unsigned Index> shouldFail()689a1d03eSRichardvoid shouldFail() { 789a1d03eSRichard if constexpr (Index == 0) { 8*2b51c8cdSDonát Nagy // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: repeated branch body in conditional chain [bugprone-branch-clone] 989a1d03eSRichard handle(0); 1089a1d03eSRichard } else if constexpr (Index == 1) { 1189a1d03eSRichard handle(1); 1289a1d03eSRichard } else { 1389a1d03eSRichard handle(0); 1489a1d03eSRichard } 1589a1d03eSRichard } 1689a1d03eSRichard 1789a1d03eSRichard template <unsigned Index> shouldPass()1889a1d03eSRichardvoid shouldPass() { 1989a1d03eSRichard if constexpr (Index == 0) { 2089a1d03eSRichard handle(0); 2189a1d03eSRichard } else if constexpr (Index == 1) { 2289a1d03eSRichard handle(1); 2389a1d03eSRichard } else { 2489a1d03eSRichard handle(2); 2589a1d03eSRichard } 2689a1d03eSRichard } 2789a1d03eSRichard shouldFailNonTemplate()2889a1d03eSRichardvoid shouldFailNonTemplate() { 2989a1d03eSRichard constexpr unsigned Index = 1; 3089a1d03eSRichard if constexpr (Index == 0) { 31*2b51c8cdSDonát Nagy // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: repeated branch body in conditional chain [bugprone-branch-clone] 3289a1d03eSRichard handle(0); 3389a1d03eSRichard } else if constexpr (Index == 1) { 3489a1d03eSRichard handle(1); 3589a1d03eSRichard } else { 3689a1d03eSRichard handle(0); 3789a1d03eSRichard } 3889a1d03eSRichard } 3989a1d03eSRichard shouldPassNonTemplate()4089a1d03eSRichardvoid shouldPassNonTemplate() { 4189a1d03eSRichard constexpr unsigned Index = 1; 4289a1d03eSRichard if constexpr (Index == 0) { 4389a1d03eSRichard handle(0); 4489a1d03eSRichard } else if constexpr (Index == 1) { 4589a1d03eSRichard handle(1); 4689a1d03eSRichard } else { 4789a1d03eSRichard handle(2); 4889a1d03eSRichard } 4989a1d03eSRichard } 5089a1d03eSRichard run()5189a1d03eSRichardvoid run() { 5289a1d03eSRichard shouldFail<0>(); 5389a1d03eSRichard shouldFail<1>(); 5489a1d03eSRichard shouldFail<2>(); 5589a1d03eSRichard shouldPass<0>(); 5689a1d03eSRichard shouldPass<1>(); 5789a1d03eSRichard shouldPass<2>(); 5889a1d03eSRichard } 59