xref: /llvm-project/clang/test/ClangScanDeps/Wsystem-headers-in-module.c (revision dc5cbba3196db61d57b7d84118732a6c96d8ee64)
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