1 | // RUN: %check_clang_tidy %s readability-duplicate-include %t -- -- -isystem %S/Inputs/duplicate-include/system -I %S/Inputs/duplicate-include |
2 | |
3 | int a; |
4 | #include <string.h> |
5 | int b; |
6 | #include <string.h> |
7 | int c; |
8 | // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include [readability-duplicate-include] |
9 | // CHECK-FIXES: {{^int a;$}} |
10 | // CHECK-FIXES-NEXT: {{^#include <string.h>$}} |
11 | // CHECK-FIXES-NEXT: {{^int b;$}} |
12 | // CHECK-FIXES-NEXT: {{^int c;$}} |
13 | |
14 | int d; |
15 | #include <iostream> |
16 | int e; |
17 | #include <iostream> // extra stuff that will also be removed |
18 | int f; |
19 | // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include |
20 | // CHECK-FIXES: {{^int d;$}} |
21 | // CHECK-FIXES-NEXT: {{^#include <iostream>$}} |
22 | // CHECK-FIXES-NEXT: {{^int e;$}} |
23 | // CHECK-FIXES-NEXT: {{^int f;$}} |
24 | |
25 | int g; |
26 | #include "duplicate-include.h" |
27 | int h; |
28 | #include "duplicate-include.h" |
29 | int i; |
30 | // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include |
31 | // CHECK-FIXES: {{^int g;$}} |
32 | // CHECK-FIXES-NEXT: {{^#include "duplicate-include.h"$}} |
33 | // CHECK-FIXES-NEXT: {{^int h;$}} |
34 | // CHECK-FIXES-NEXT: {{^int i;$}} |
35 | |
36 | #include <types.h> |
37 | |
38 | int j; |
39 | #include <sys/types.h> |
40 | int k; |
41 | #include <sys/types.h> |
42 | int l; |
43 | // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include |
44 | // CHECK-FIXES: {{^int j;$}} |
45 | // CHECK-FIXES-NEXT: {{^#include <sys/types.h>$}} |
46 | // CHECK-FIXES-NEXT: {{^int k;$}} |
47 | // CHECK-FIXES-NEXT: {{^int l;$}} |
48 | |
49 | int m; |
50 | # include <string.h> // lots of space |
51 | int n; |
52 | // CHECK-MESSAGES: :[[@LINE-2]]:9: warning: duplicate include |
53 | // CHECK-FIXES: {{^int m;$}} |
54 | // CHECK-FIXES-NEXT: {{^int n;$}} |
55 | |
56 | // defining a macro in the main file resets the included file cache |
57 | #define ARBITRARY_MACRO |
58 | int o; |
59 | #include <sys/types.h> |
60 | int p; |
61 | // CHECK-FIXES: {{^int o;$}} |
62 | // CHECK-FIXES-NEXT: {{^#include <sys/types.h>$}} |
63 | // CHECK-FIXES-NEXT: {{^int p;$}} |
64 | |
65 | // undefining a macro resets the cache |
66 | #undef ARBITRARY_MACRO |
67 | int q; |
68 | #include <sys/types.h> |
69 | int r; |
70 | // CHECK-FIXES: {{^int q;$}} |
71 | // CHECK-FIXES-NEXT: {{^#include <sys/types.h>$}} |
72 | // CHECK-FIXES-NEXT: {{^int r;$}} |
73 | |
74 | namespace Issue_87303 { |
75 | #define RESET_INCLUDE_CACHE |
76 | // Expect no warnings |
77 | |
78 | #define MACRO_FILENAME "duplicate-include.h" |
79 | #include MACRO_FILENAME |
80 | #include "duplicate-include.h" |
81 | |
82 | #define MACRO_FILENAME_2 <duplicate-include2.h> |
83 | #include <duplicate-include2.h> |
84 | #include MACRO_FILENAME_2 |
85 | |
86 | #undef RESET_INCLUDE_CACHE |
87 | } // Issue_87303 |
88 | |