13
13
// RUN: %deps-to-rsp %t/deps.json --module-name Top > %t/Top.rsp
14
14
// RUN: %deps-to-rsp %t/deps.json --module-name Left > %t/Left.rsp
15
15
// RUN: %deps-to-rsp %t/deps.json --module-name Right > %t/Right.rsp
16
+ // RUN: %deps-to-rsp %t/deps.json --module-name ZAtImport > %t/ZAtImport.rsp
17
+ // RUN: %deps-to-rsp %t/deps.json --module-name ZPragmaImport > %t/ZPragmaImport.rsp
16
18
// RUN: %deps-to-rsp %t/deps.json --tu-index 0 > %t/tu.rsp
17
19
18
20
// Extract include-tree casids
65
67
// CHECK: [[PREFIX]]/Top.h llvmcas://{{[[:xdigit:]]+}}
66
68
67
69
// CHECK-LABEL: TRANSLATION UNIT
68
- // CHECK: [[PREFIX]]/tu.c llvmcas://{{[[:xdigit:]]+}}
70
+ // CHECK: [[PREFIX]]/tu.m llvmcas://{{[[:xdigit:]]+}}
69
71
// CHECK: 1:1 <built-in> llvmcas://{{[[:xdigit:]]+}}
70
72
// CHECK: 2:1 (Module) Left
71
73
// CHECK: 3:1 (Module) Right
74
+
75
+ // Note: the modules with explicit imports are imported via parser and are not
76
+ // recorded in the include-tree; it's handled entirely by fmodule-map-file,
77
+ // fmodule-file, and fmodule-file-cache-key options.
78
+
72
79
// CHECK: Files:
73
80
// CHECK: [[PREFIX]]/Left.h llvmcas://{{[[:xdigit:]]+}}
74
81
// CHECK: [[PREFIX]]/module.modulemap llvmcas://{{[[:xdigit:]]+}}
101
108
// CHECK: "-fmodule-file-cache-key"
102
109
// CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
103
110
// CHECK-NEXT: "llvmcas://{{[[:xdigit:]]+}}"
104
- // CHECK: "-x"
105
- // CHECK-NEXT: "c"
106
111
// CHECK: "-fmodule-file=Top=[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
107
112
// CHECK: "-fmodules"
108
113
// CHECK: "-fmodule-name=Left"
138
143
// CHECK: "-fmodule-file-cache-key
139
144
// CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
140
145
// CHECK-NEXT: "llvmcas://{{[[:xdigit:]]+}}"
141
- // CHECK: "-x"
142
- // CHECK-NEXT: "c"
143
146
// CHECK: "-fmodule-file=Top=[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
144
147
// CHECK: "-fmodules"
145
148
// CHECK: "-fmodule-name=Right"
167
170
// CHECK-NEXT: "[[TOP_TREE]]"
168
171
// CHECK: "-fcache-compile-job"
169
172
// CHECK: "-emit-module"
170
- // CHECK: "-x"
171
- // CHECK-NEXT: "c"
172
173
// CHECK: "-fmodules"
173
174
// CHECK: "-fmodule-name=Top"
174
175
// CHECK: "-fno-implicit-modules"
179
180
// CHECK-NEXT: ]
180
181
// CHECK: "name": "Top"
181
182
// CHECK: }
183
+ // CHECK-NEXT: {
184
+ // CHECK: "cas-include-tree-id": "[[AT_IMPORT_TREE:llvmcas://[[:xdigit:]]+]]"
185
+ // CHECK: "clang-module-deps": []
186
+ // CHECK: "clang-modulemap-file": "[[PREFIX]]/module.modulemap"
187
+ // CHECK: "command-line": [
188
+ // CHECK-NEXT: "-cc1"
189
+ // CHECK: "-fcas-path"
190
+ // CHECK-NEXT: "[[PREFIX]]/cas"
191
+ // CHECK: "-o"
192
+ // CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/ZAtImport-{{.*}}.pcm"
193
+ // CHECK: "-disable-free"
194
+ // CHECK: "-fno-pch-timestamp"
195
+ // CHECK: "-fcas-include-tree"
196
+ // CHECK-NEXT: "[[AT_IMPORT_TREE]]"
197
+ // CHECK: "-fcache-compile-job"
198
+ // CHECK: "-emit-module"
199
+ // CHECK: "-fmodules"
200
+ // CHECK: "-fmodule-name=ZAtImport"
201
+ // CHECK: "-fno-implicit-modules"
202
+ // CHECK: ]
203
+ // CHECK: "file-deps": [
204
+ // CHECK-NEXT: "[[PREFIX]]/AtImport.h"
205
+ // CHECK-NEXT: "[[PREFIX]]/module.modulemap"
206
+ // CHECK-NEXT: ]
207
+ // CHECK: "name": "ZAtImport"
208
+ // CHECK: }
209
+ // CHECK-NEXT: {
210
+ // CHECK: "cas-include-tree-id": "[[PRAGMA_IMPORT_TREE:llvmcas://[[:xdigit:]]+]]"
211
+ // CHECK: "clang-module-deps": []
212
+ // CHECK: "clang-modulemap-file": "[[PREFIX]]/module.modulemap"
213
+ // CHECK: "command-line": [
214
+ // CHECK-NEXT: "-cc1"
215
+ // CHECK: "-fcas-path"
216
+ // CHECK-NEXT: "[[PREFIX]]/cas"
217
+ // CHECK: "-o"
218
+ // CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/ZPragmaImport-{{.*}}.pcm"
219
+ // CHECK: "-disable-free"
220
+ // CHECK: "-fno-pch-timestamp"
221
+ // CHECK: "-fcas-include-tree"
222
+ // CHECK-NEXT: "[[PRAGMA_IMPORT_TREE]]"
223
+ // CHECK: "-fcache-compile-job"
224
+ // CHECK: "-emit-module"
225
+ // CHECK: "-fmodules"
226
+ // CHECK: "-fmodule-name=ZPragmaImport"
227
+ // CHECK: "-fno-implicit-modules"
228
+ // CHECK: ]
229
+ // CHECK: "file-deps": [
230
+ // CHECK-NEXT: "[[PREFIX]]/PragmaImport.h"
231
+ // CHECK-NEXT: "[[PREFIX]]/module.modulemap"
232
+ // CHECK-NEXT: ]
233
+ // CHECK: "name": "ZPragmaImport"
234
+ // CHECK: }
182
235
// CHECK: ]
183
236
// CHECK-NEXT: "translation-units": [
184
237
// CHECK-NEXT: {
192
245
// CHECK-NEXT: {
193
246
// CHECK: "module-name": "Right"
194
247
// CHECK: }
248
+ // CHECK-NEXT: {
249
+ // CHECK: "module-name": "ZAtImport"
250
+ // CHECK: }
251
+ // CHECK-NEXT: {
252
+ // CHECK: "module-name": "ZPragmaImport"
253
+ // CHECK: }
195
254
// CHECK-NEXT: ]
196
255
// CHECK: "command-line": [
197
256
// CHECK-NEXT: "-cc1"
209
268
// CHECK: "-fmodule-file-cache-key"
210
269
// CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/Right-{{.*}}.pcm"
211
270
// CHECK-NEXT: "llvmcas://{{[[:xdigit:]]+}}"
212
- // CHECK: "-x"
213
- // CHECK-NEXT: "c"
214
271
// CHECK: "-fmodule-file=Left=[[PREFIX]]/outputs/{{.*}}/Left-{{.*}}.pcm"
215
272
// CHECK: "-fmodule-file=Right=[[PREFIX]]/outputs/{{.*}}/Right-{{.*}}.pcm"
216
273
// CHECK: "-fmodules"
217
274
// CHECK: "-fno-implicit-modules"
218
275
// CHECK: ]
219
276
// CHECK: "file-deps": [
220
- // CHECK-NEXT: "[[PREFIX]]/tu.c "
277
+ // CHECK-NEXT: "[[PREFIX]]/tu.m "
221
278
// CHECK-NEXT: ]
222
- // CHECK: "input-file": "[[PREFIX]]/tu.c "
279
+ // CHECK: "input-file": "[[PREFIX]]/tu.m "
223
280
// CHECK: }
224
281
// CHECK-NEXT: ]
225
282
// CHECK-NEXT: }
234
291
// RUN: rm -rf %t/outputs
235
292
// RUN: %clang @%t/Right.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_MISS
236
293
// RUN: rm -rf %t/outputs
294
+ // RUN: %clang @%t/ZAtImport.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_MISS
295
+ // RUN: rm -rf %t/outputs
296
+ // RUN: %clang @%t/ZPragmaImport.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_MISS
297
+ // RUN: rm -rf %t/outputs
237
298
// RUN: %clang @%t/tu.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_MISS
238
299
239
300
// Check cache hits
240
301
// RUN: %clang @%t/Top.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
241
302
// RUN: %clang @%t/Left.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
242
303
// RUN: %clang @%t/Right.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
304
+ // RUN: %clang @%t/ZAtImport.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
305
+ // RUN: %clang @%t/ZPragmaImport.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
243
306
// RUN: %clang @%t/tu.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
244
307
245
308
// CACHE_MISS: compile job cache miss
246
309
// CACHE_HIT: compile job cache hit
247
310
248
311
//--- cdb.json.template
249
312
[{
250
- "file" : "DIR/tu.c " ,
313
+ "file" : "DIR/tu.m " ,
251
314
"directory" : "DIR" ,
252
- "command" : "clang -fsyntax-only DIR/tu.c -I DIR -fmodules -fimplicit-modules -fimplicit-module-maps -fmodules-cache-path=DIR/module-cache -Rcompile-job-cache"
315
+ "command" : "clang -fsyntax-only DIR/tu.m -I DIR -fmodules -fimplicit-modules -fimplicit-module-maps -fmodules-cache-path=DIR/module-cache -Rcompile-job-cache"
253
316
}]
254
317
255
318
//--- module.modulemap
256
319
module Top { header "Top.h" export * }
257
320
module Left { header "Left.h" export * }
258
321
module Right { header "Right.h" export * }
322
+ module ZAtImport { header "AtImport.h" }
323
+ module ZPragmaImport { header "PragmaImport.h" }
259
324
260
325
//--- Top.h
261
326
#pragma once
@@ -272,12 +337,22 @@ void left(void);
272
337
#include "Top.h"
273
338
void right (void );
274
339
275
- //--- tu.c
340
+ //--- AtImport.h
341
+ void at_import (void );
342
+
343
+ //--- PragmaImport.h
344
+ void pragma_import (void );
345
+
346
+ //--- tu.m
276
347
#import "Left.h"
277
348
#import <Right.h>
349
+ @import ZAtImport ;
350
+ #pragma clang module import ZPragmaImport
278
351
279
352
void tu (void ) {
280
353
top ();
281
354
left ();
282
355
right ();
356
+ at_import ();
357
+ pragma_import ();
283
358
}
0 commit comments