Skip to content

Commit a13b79f

Browse files
committed
[clang][cas] Add a test for include-tree with explicit imports
With explicit imports, we do not record the module import in the include tree, because the only thing that happens is to lookup the module by name, which works already via the command-line options that provide the module via the action cache.
1 parent 43df61c commit a13b79f

File tree

1 file changed

+89
-14
lines changed

1 file changed

+89
-14
lines changed

clang/test/ClangScanDeps/modules-include-tree.c

Lines changed: 89 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
// RUN: %deps-to-rsp %t/deps.json --module-name Top > %t/Top.rsp
1414
// RUN: %deps-to-rsp %t/deps.json --module-name Left > %t/Left.rsp
1515
// 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
1618
// RUN: %deps-to-rsp %t/deps.json --tu-index 0 > %t/tu.rsp
1719

1820
// Extract include-tree casids
@@ -65,10 +67,15 @@
6567
// CHECK: [[PREFIX]]/Top.h llvmcas://{{[[:xdigit:]]+}}
6668

6769
// CHECK-LABEL: TRANSLATION UNIT
68-
// CHECK: [[PREFIX]]/tu.c llvmcas://{{[[:xdigit:]]+}}
70+
// CHECK: [[PREFIX]]/tu.m llvmcas://{{[[:xdigit:]]+}}
6971
// CHECK: 1:1 <built-in> llvmcas://{{[[:xdigit:]]+}}
7072
// CHECK: 2:1 (Module) Left
7173
// 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+
7279
// CHECK: Files:
7380
// CHECK: [[PREFIX]]/Left.h llvmcas://{{[[:xdigit:]]+}}
7481
// CHECK: [[PREFIX]]/module.modulemap llvmcas://{{[[:xdigit:]]+}}
@@ -101,8 +108,6 @@
101108
// CHECK: "-fmodule-file-cache-key"
102109
// CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
103110
// CHECK-NEXT: "llvmcas://{{[[:xdigit:]]+}}"
104-
// CHECK: "-x"
105-
// CHECK-NEXT: "c"
106111
// CHECK: "-fmodule-file=Top=[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
107112
// CHECK: "-fmodules"
108113
// CHECK: "-fmodule-name=Left"
@@ -138,8 +143,6 @@
138143
// CHECK: "-fmodule-file-cache-key
139144
// CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
140145
// CHECK-NEXT: "llvmcas://{{[[:xdigit:]]+}}"
141-
// CHECK: "-x"
142-
// CHECK-NEXT: "c"
143146
// CHECK: "-fmodule-file=Top=[[PREFIX]]/outputs/{{.*}}/Top-{{.*}}.pcm"
144147
// CHECK: "-fmodules"
145148
// CHECK: "-fmodule-name=Right"
@@ -167,8 +170,6 @@
167170
// CHECK-NEXT: "[[TOP_TREE]]"
168171
// CHECK: "-fcache-compile-job"
169172
// CHECK: "-emit-module"
170-
// CHECK: "-x"
171-
// CHECK-NEXT: "c"
172173
// CHECK: "-fmodules"
173174
// CHECK: "-fmodule-name=Top"
174175
// CHECK: "-fno-implicit-modules"
@@ -179,6 +180,58 @@
179180
// CHECK-NEXT: ]
180181
// CHECK: "name": "Top"
181182
// 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: }
182235
// CHECK: ]
183236
// CHECK-NEXT: "translation-units": [
184237
// CHECK-NEXT: {
@@ -192,6 +245,12 @@
192245
// CHECK-NEXT: {
193246
// CHECK: "module-name": "Right"
194247
// CHECK: }
248+
// CHECK-NEXT: {
249+
// CHECK: "module-name": "ZAtImport"
250+
// CHECK: }
251+
// CHECK-NEXT: {
252+
// CHECK: "module-name": "ZPragmaImport"
253+
// CHECK: }
195254
// CHECK-NEXT: ]
196255
// CHECK: "command-line": [
197256
// CHECK-NEXT: "-cc1"
@@ -209,17 +268,15 @@
209268
// CHECK: "-fmodule-file-cache-key"
210269
// CHECK-NEXT: "[[PREFIX]]/outputs/{{.*}}/Right-{{.*}}.pcm"
211270
// CHECK-NEXT: "llvmcas://{{[[:xdigit:]]+}}"
212-
// CHECK: "-x"
213-
// CHECK-NEXT: "c"
214271
// CHECK: "-fmodule-file=Left=[[PREFIX]]/outputs/{{.*}}/Left-{{.*}}.pcm"
215272
// CHECK: "-fmodule-file=Right=[[PREFIX]]/outputs/{{.*}}/Right-{{.*}}.pcm"
216273
// CHECK: "-fmodules"
217274
// CHECK: "-fno-implicit-modules"
218275
// CHECK: ]
219276
// CHECK: "file-deps": [
220-
// CHECK-NEXT: "[[PREFIX]]/tu.c"
277+
// CHECK-NEXT: "[[PREFIX]]/tu.m"
221278
// CHECK-NEXT: ]
222-
// CHECK: "input-file": "[[PREFIX]]/tu.c"
279+
// CHECK: "input-file": "[[PREFIX]]/tu.m"
223280
// CHECK: }
224281
// CHECK-NEXT: ]
225282
// CHECK-NEXT: }
@@ -234,28 +291,36 @@
234291
// RUN: rm -rf %t/outputs
235292
// RUN: %clang @%t/Right.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_MISS
236293
// 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
237298
// RUN: %clang @%t/tu.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_MISS
238299

239300
// Check cache hits
240301
// RUN: %clang @%t/Top.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
241302
// RUN: %clang @%t/Left.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
242303
// 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
243306
// RUN: %clang @%t/tu.rsp 2>&1 | FileCheck %s -check-prefix=CACHE_HIT
244307

245308
// CACHE_MISS: compile job cache miss
246309
// CACHE_HIT: compile job cache hit
247310

248311
//--- cdb.json.template
249312
[{
250-
"file": "DIR/tu.c",
313+
"file": "DIR/tu.m",
251314
"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"
253316
}]
254317

255318
//--- module.modulemap
256319
module Top { header "Top.h" export *}
257320
module Left { header "Left.h" export *}
258321
module Right { header "Right.h" export *}
322+
module ZAtImport { header "AtImport.h" }
323+
module ZPragmaImport { header "PragmaImport.h" }
259324

260325
//--- Top.h
261326
#pragma once
@@ -272,12 +337,22 @@ void left(void);
272337
#include "Top.h"
273338
void right(void);
274339

275-
//--- tu.c
340+
//--- AtImport.h
341+
void at_import(void);
342+
343+
//--- PragmaImport.h
344+
void pragma_import(void);
345+
346+
//--- tu.m
276347
#import "Left.h"
277348
#import <Right.h>
349+
@import ZAtImport;
350+
#pragma clang module import ZPragmaImport
278351

279352
void tu(void) {
280353
top();
281354
left();
282355
right();
356+
at_import();
357+
pragma_import();
283358
}

0 commit comments

Comments
 (0)