// RUN: %check_clang_tidy %s readability-duplicate-include %t -- -- -isystem %S/Inputs/duplicate-include/system -I %S/Inputs/duplicate-include int a; #include int b; #include int c; // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include [readability-duplicate-include] // CHECK-FIXES: {{^int a;$}} // CHECK-FIXES-NEXT: {{^#include $}} // CHECK-FIXES-NEXT: {{^int b;$}} // CHECK-FIXES-NEXT: {{^int c;$}} int d; #include int e; #include // extra stuff that will also be removed int f; // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include // CHECK-FIXES: {{^int d;$}} // CHECK-FIXES-NEXT: {{^#include $}} // CHECK-FIXES-NEXT: {{^int e;$}} // CHECK-FIXES-NEXT: {{^int f;$}} int g; #include "duplicate-include.h" int h; #include "duplicate-include.h" int i; // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include // CHECK-FIXES: {{^int g;$}} // CHECK-FIXES-NEXT: {{^#include "duplicate-include.h"$}} // CHECK-FIXES-NEXT: {{^int h;$}} // CHECK-FIXES-NEXT: {{^int i;$}} #include int j; #include int k; #include int l; // CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include // CHECK-FIXES: {{^int j;$}} // CHECK-FIXES-NEXT: {{^#include $}} // CHECK-FIXES-NEXT: {{^int k;$}} // CHECK-FIXES-NEXT: {{^int l;$}} int m; # include // lots of space int n; // CHECK-MESSAGES: :[[@LINE-2]]:9: warning: duplicate include // CHECK-FIXES: {{^int m;$}} // CHECK-FIXES-NEXT: {{^int n;$}} // defining a macro in the main file resets the included file cache #define ARBITRARY_MACRO int o; #include int p; // CHECK-FIXES: {{^int o;$}} // CHECK-FIXES-NEXT: {{^#include $}} // CHECK-FIXES-NEXT: {{^int p;$}} // undefining a macro resets the cache #undef ARBITRARY_MACRO int q; #include int r; // CHECK-FIXES: {{^int q;$}} // CHECK-FIXES-NEXT: {{^#include $}} // CHECK-FIXES-NEXT: {{^int r;$}}