1 // RUN: %check_clang_tidy %s readability-braces-around-statements %t -- -- -std=c++17
2 
3 void handle(bool);
4 
5 template <bool branch>
shouldFail()6 void shouldFail() {
7   if constexpr (branch)
8   // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: statement should be inside braces [readability-braces-around-statements]
9     handle(true);
10   else
11   // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: statement should be inside braces [readability-braces-around-statements]
12     handle(false);
13 }
14 
15 template <bool branch>
shouldPass()16 void shouldPass() {
17   if constexpr (branch) {
18     handle(true);
19   } else {
20     handle(false);
21   }
22 }
23 
shouldFailNonTemplate()24 void shouldFailNonTemplate() {
25   constexpr bool branch = false;
26   if constexpr (branch)
27   // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: statement should be inside braces [readability-braces-around-statements]
28     handle(true);
29   else
30   // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: statement should be inside braces [readability-braces-around-statements]
31     handle(false);
32 }
33 
shouldPass()34 void shouldPass() {
35   constexpr bool branch = false;
36   if constexpr (branch) {
37     handle(true);
38   } else {
39     handle(false);
40   }
41 }
42 
run()43 void run() {
44     shouldFail<true>();
45     shouldFail<false>();
46     shouldPass<true>();
47     shouldPass<false>();
48 }
49