1*dc5cbba3SBen Langmuir // Check that Wsystem-headers-in-module shows diagnostics in the named system 2*dc5cbba3SBen Langmuir // module, but not in other system headers or modules when built with explicit 3*dc5cbba3SBen Langmuir // modules. 4*dc5cbba3SBen Langmuir 5*dc5cbba3SBen Langmuir // RUN: rm -rf %t 6*dc5cbba3SBen Langmuir // RUN: split-file %s %t 7*dc5cbba3SBen Langmuir // RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json 8*dc5cbba3SBen Langmuir 9*dc5cbba3SBen Langmuir // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/deps.json 10*dc5cbba3SBen Langmuir 11*dc5cbba3SBen Langmuir // RUN: %deps-to-rsp %t/deps.json --module-name=dependent_sys_mod > %t/dependent_sys_mod.rsp 12*dc5cbba3SBen Langmuir // RUN: %deps-to-rsp %t/deps.json --module-name=sys_mod > %t/sys_mod.rsp 13*dc5cbba3SBen Langmuir // RUN: %deps-to-rsp %t/deps.json --module-name=other_sys_mod > %t/other_sys_mod.rsp 14*dc5cbba3SBen Langmuir // RUN: %deps-to-rsp %t/deps.json --tu-index 0 > %t/tu.rsp 15*dc5cbba3SBen Langmuir 16*dc5cbba3SBen Langmuir // RUN: %clang @%t/dependent_sys_mod.rsp -verify 17*dc5cbba3SBen Langmuir // RUN: %clang @%t/sys_mod.rsp -verify 18*dc5cbba3SBen Langmuir // RUN: %clang @%t/other_sys_mod.rsp -verify 19*dc5cbba3SBen Langmuir // RUN: %clang @%t/tu.rsp -verify 20*dc5cbba3SBen Langmuir 21*dc5cbba3SBen Langmuir // CHECK-NOT: warning: 22*dc5cbba3SBen Langmuir // CHECK: sys_mod.h:2:7: warning: extra ';' 23*dc5cbba3SBen Langmuir // CHECK-NOT: warning: 24*dc5cbba3SBen Langmuir 25*dc5cbba3SBen Langmuir //--- cdb.json.template 26*dc5cbba3SBen Langmuir [{ 27*dc5cbba3SBen Langmuir "directory": "DIR", 28*dc5cbba3SBen Langmuir "command": "clang -fsyntax-only -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/mcp DIR/tu.c -isystem DIR/sys -Wextra-semi -Wsystem-headers-in-module=sys_mod", 29*dc5cbba3SBen Langmuir "file": "DIR/tu.c" 30*dc5cbba3SBen Langmuir }] 31*dc5cbba3SBen Langmuir 32*dc5cbba3SBen Langmuir //--- sys/other_sys_header.h 33*dc5cbba3SBen Langmuir int x;; 34*dc5cbba3SBen Langmuir 35*dc5cbba3SBen Langmuir //--- sys_mod.h 36*dc5cbba3SBen Langmuir #include "dependent_sys_mod.h" 37*dc5cbba3SBen Langmuir int y;; // expected-warning {{extra ';' outside of a function}} 38*dc5cbba3SBen Langmuir 39*dc5cbba3SBen Langmuir //--- other_sys_mod.h 40*dc5cbba3SBen Langmuir int z;; 41*dc5cbba3SBen Langmuir // expected-no-diagnostics 42*dc5cbba3SBen Langmuir 43*dc5cbba3SBen Langmuir //--- dependent_sys_mod.h 44*dc5cbba3SBen Langmuir int w;; 45*dc5cbba3SBen Langmuir // expected-no-diagnostics 46*dc5cbba3SBen Langmuir 47*dc5cbba3SBen Langmuir //--- module.modulemap 48*dc5cbba3SBen Langmuir module sys_mod [system] { header "sys_mod.h" } 49*dc5cbba3SBen Langmuir module other_sys_mod [system] { header "other_sys_mod.h" } 50*dc5cbba3SBen Langmuir module dependent_sys_mod [system] { header "dependent_sys_mod.h" } 51*dc5cbba3SBen Langmuir 52*dc5cbba3SBen Langmuir //--- tu.c 53*dc5cbba3SBen Langmuir #include "sys_mod.h" 54*dc5cbba3SBen Langmuir #include "other_sys_mod.h" 55*dc5cbba3SBen Langmuir #include "other_sys_header.h" 56*dc5cbba3SBen Langmuir // expected-no-diagnostics 57