189a1d03eSRichard // RUN: rm -rf %T/Headers
289a1d03eSRichard // RUN: mkdir %T/Headers
389a1d03eSRichard // RUN: cp -r %S/Inputs/restrict-system-includes %T/Headers/portability-restrict-system-includes
489a1d03eSRichard // RUN: %check_clang_tidy -std=c++11 %s portability-restrict-system-includes %t \
5*e8a3ddafSNathan James // RUN:   -- -config="{CheckOptions: {portability-restrict-system-includes.Includes: 'transitive.h,s.h'}}" \
689a1d03eSRichard // RUN:   -system-headers -header-filter=.* \
789a1d03eSRichard // RUN:   -- -I %T/Headers/portability-restrict-system-includes -isystem %T/Headers/portability-restrict-system-includes/system
889a1d03eSRichard // RUN: FileCheck -input-file=%T/Headers/portability-restrict-system-includes/transitive2.h %s -check-prefix=CHECK-FIXES
989a1d03eSRichard // RUN: rm -rf %T/Headers
1089a1d03eSRichard // FIXME: Make the test work in all language modes.
1189a1d03eSRichard 
1289a1d03eSRichard // transitive.h includes <r.h> and <t.h>
1389a1d03eSRichard #include <transitive.h>
1489a1d03eSRichard // CHECK-MESSAGES: :1:1: warning: system include r.h not allowed, transitively included from {{.*}}
1589a1d03eSRichard // CHECK-MESSAGES: :2:1: warning: system include t.h not allowed, transitively included from {{.*}}
1689a1d03eSRichard 
1789a1d03eSRichard // transitive.h includes <s.h> and <t.h>
1889a1d03eSRichard #include "transitive2.h"
1989a1d03eSRichard // CHECK-MESSAGES: :2:1: warning: system include t.h not allowed, transitively included from {{.*}}
2089a1d03eSRichard // CHECK-FIXES-NOT: #include <t.h>
2189a1d03eSRichard 
main()2289a1d03eSRichard int main() {
2389a1d03eSRichard   // f() is declared in r.h
2489a1d03eSRichard }
25