1 // RUN: %check_clang_tidy %s readability-redundant-preprocessor %t -- -- -I %S
2 
3 // Positive testing.
4 #ifndef FOO
5 // CHECK-NOTES: [[@LINE+1]]:2: warning: nested redundant #ifndef; consider removing it [readability-redundant-preprocessor]
6 #ifndef FOO
7 // CHECK-NOTES: [[@LINE-3]]:2: note: previous #ifndef was here
8 void f();
9 #endif
10 #endif
11 
12 // Positive testing of inverted condition.
13 #ifndef FOO
14 // CHECK-NOTES: [[@LINE+1]]:2: warning: nested redundant #ifdef; consider removing it [readability-redundant-preprocessor]
15 #ifdef FOO
16 // CHECK-NOTES: [[@LINE-3]]:2: note: previous #ifndef was here
17 void f2();
18 #endif
19 #endif
20 
21 // Negative testing.
22 #include "readability-redundant-preprocessor.h"
23 
24 #ifndef BAR
25 void g();
26 #endif
27 
28 #ifndef FOO
29 #ifndef BAR
30 void h();
31 #endif
32 #endif
33 
34 #ifndef FOO
35 #ifdef BAR
36 void i();
37 #endif
38 #endif
39 
40 // Positive #if testing.
41 #define FOO 4
42 
43 #if FOO == 4
44 // CHECK-NOTES: [[@LINE+1]]:2: warning: nested redundant #if; consider removing it [readability-redundant-preprocessor]
45 #if FOO == 4
46 // CHECK-NOTES: [[@LINE-3]]:2: note: previous #if was here
47 void j();
48 #endif
49 #endif
50 
51 #if FOO == 3 + 1
52 // CHECK-NOTES: [[@LINE+1]]:2: warning: nested redundant #if; consider removing it [readability-redundant-preprocessor]
53 #if FOO == 3 + 1
54 // CHECK-NOTES: [[@LINE-3]]:2: note: previous #if was here
55 void j();
56 #endif
57 #endif
58 
59 #if FOO == \
60     4
61 // CHECK-NOTES: [[@LINE+1]]:2: warning: nested redundant #if; consider removing it [readability-redundant-preprocessor]
62 #if FOO == \
63     4
64 // CHECK-NOTES: [[@LINE-5]]:2: note: previous #if was here
65 void j();
66 #endif
67 #endif
68 
69 // Negative #if testing.
70 #define BAR 4
71 
72 #if FOO == 4
73 #if BAR == 4
74 void k();
75 #endif
76 #endif
77 
78 #if FOO == \
79     4
80 #if BAR == \
81     5
82 void k();
83 #endif
84 #endif
85