xref: /llvm-project/clang/test/ClangScanDeps/modules-pch-dangling.c (revision 64e4d03c681a1c43ec22aee9ce32b784ed5aee9c)
1 // Unsupported on AIX because we don't support the requisite "__clangast"
2 // section in XCOFF yet.
3 // UNSUPPORTED: target={{.*}}-aix{{.*}}
4 
5 // This test checks that the dependency scanner can handle larger amount of
6 // explicitly built modules retrieved from the PCH.
7 // (Previously, there was a bug dangling iterator bug that manifested only with
8 // 16 and more retrieved modules.)
9 
10 // RUN: rm -rf %t
11 // RUN: split-file %s %t
12 
13 //--- mod_00.h
14 //--- mod_01.h
15 //--- mod_02.h
16 //--- mod_03.h
17 //--- mod_04.h
18 //--- mod_05.h
19 //--- mod_06.h
20 //--- mod_07.h
21 //--- mod_08.h
22 //--- mod_09.h
23 //--- mod_10.h
24 //--- mod_11.h
25 //--- mod_12.h
26 //--- mod_13.h
27 //--- mod_14.h
28 //--- mod_15.h
29 //--- mod_16.h
30 //--- mod.h
31 #include "mod_00.h"
32 #include "mod_01.h"
33 #include "mod_02.h"
34 #include "mod_03.h"
35 #include "mod_04.h"
36 #include "mod_05.h"
37 #include "mod_06.h"
38 #include "mod_07.h"
39 #include "mod_08.h"
40 #include "mod_09.h"
41 #include "mod_10.h"
42 #include "mod_11.h"
43 #include "mod_12.h"
44 #include "mod_13.h"
45 #include "mod_14.h"
46 #include "mod_15.h"
47 #include "mod_16.h"
48 //--- module.modulemap
49 module mod_00 { header "mod_00.h" }
50 module mod_01 { header "mod_01.h" }
51 module mod_02 { header "mod_02.h" }
52 module mod_03 { header "mod_03.h" }
53 module mod_04 { header "mod_04.h" }
54 module mod_05 { header "mod_05.h" }
55 module mod_06 { header "mod_06.h" }
56 module mod_07 { header "mod_07.h" }
57 module mod_08 { header "mod_08.h" }
58 module mod_09 { header "mod_09.h" }
59 module mod_10 { header "mod_10.h" }
60 module mod_11 { header "mod_11.h" }
61 module mod_12 { header "mod_12.h" }
62 module mod_13 { header "mod_13.h" }
63 module mod_14 { header "mod_14.h" }
64 module mod_15 { header "mod_15.h" }
65 module mod_16 { header "mod_16.h" }
66 module mod    { header "mod.h"    }
67 
68 //--- pch.h
69 #include "mod.h"
70 
71 //--- tu.c
72 
73 //--- cdb_pch.json.template
74 [{
75   "file": "DIR/pch.h",
76   "directory": "DIR",
77   "command": "clang -x c-header DIR/pch.h -fmodules -gmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -o DIR/pch.h.gch"
78 }]
79 
80 //--- cdb_tu.json.template
81 [{
82   "file": "DIR/tu.c",
83   "directory": "DIR",
84   "command": "clang -fsyntax-only DIR/tu.c -fmodules -gmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -include DIR/pch.h -o DIR/tu.o"
85 }]
86 
87 // Scan dependencies of the PCH:
88 //
89 // RUN: sed "s|DIR|%/t|g" %t/cdb_pch.json.template > %t/cdb_pch.json
90 // RUN: clang-scan-deps -compilation-database %t/cdb_pch.json -format experimental-full \
91 // RUN:   -module-files-dir %t/build > %t/result_pch.json
92 
93 // Explicitly build the PCH:
94 //
95 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_00 > %t/mod_00.cc1.rsp
96 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_01 > %t/mod_01.cc1.rsp
97 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_02 > %t/mod_02.cc1.rsp
98 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_03 > %t/mod_03.cc1.rsp
99 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_04 > %t/mod_04.cc1.rsp
100 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_05 > %t/mod_05.cc1.rsp
101 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_06 > %t/mod_06.cc1.rsp
102 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_07 > %t/mod_07.cc1.rsp
103 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_08 > %t/mod_08.cc1.rsp
104 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_09 > %t/mod_09.cc1.rsp
105 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_10 > %t/mod_10.cc1.rsp
106 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_11 > %t/mod_11.cc1.rsp
107 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_12 > %t/mod_12.cc1.rsp
108 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_13 > %t/mod_13.cc1.rsp
109 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_14 > %t/mod_14.cc1.rsp
110 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_15 > %t/mod_15.cc1.rsp
111 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod_16 > %t/mod_16.cc1.rsp
112 // RUN: %deps-to-rsp %t/result_pch.json --module-name=mod    > %t/mod.cc1.rsp
113 // RUN: %deps-to-rsp %t/result_pch.json --tu-index=0 > %t/pch.rsp
114 //
115 // RUN: %clang @%t/mod_00.cc1.rsp
116 // RUN: %clang @%t/mod_01.cc1.rsp
117 // RUN: %clang @%t/mod_02.cc1.rsp
118 // RUN: %clang @%t/mod_03.cc1.rsp
119 // RUN: %clang @%t/mod_04.cc1.rsp
120 // RUN: %clang @%t/mod_05.cc1.rsp
121 // RUN: %clang @%t/mod_06.cc1.rsp
122 // RUN: %clang @%t/mod_07.cc1.rsp
123 // RUN: %clang @%t/mod_08.cc1.rsp
124 // RUN: %clang @%t/mod_09.cc1.rsp
125 // RUN: %clang @%t/mod_10.cc1.rsp
126 // RUN: %clang @%t/mod_11.cc1.rsp
127 // RUN: %clang @%t/mod_12.cc1.rsp
128 // RUN: %clang @%t/mod_13.cc1.rsp
129 // RUN: %clang @%t/mod_14.cc1.rsp
130 // RUN: %clang @%t/mod_15.cc1.rsp
131 // RUN: %clang @%t/mod_16.cc1.rsp
132 // RUN: %clang @%t/mod.cc1.rsp
133 // RUN: %clang @%t/pch.rsp
134 
135 // Scan dependencies of the TU, checking it doesn't crash:
136 //
137 // RUN: sed "s|DIR|%/t|g" %t/cdb_tu.json.template > %t/cdb_tu.json
138 // RUN: clang-scan-deps -compilation-database %t/cdb_tu.json -format experimental-full \
139 // RUN:   -module-files-dir %t/build
140