xref: /llvm-project/clang/test/ClangScanDeps/optimize-vfs-edgecases.m (revision 7847e44594aa932c0a5f5d2cd15940d2a815c059)
1*7847e445SMichael Spencer// RUN: rm -rf %t
2*7847e445SMichael Spencer// RUN: split-file %s %t
3*7847e445SMichael Spencer// RUN: sed -e "s|DIR|%/t|g" %t/build/compile-commands.json.in > %t/build/compile-commands.json
4*7847e445SMichael Spencer// RUN: sed -e "s|DIR|%/t|g" %t/build/vfsoverlay.yaml.in > %t/build/vfsoverlay.yaml
5*7847e445SMichael Spencer// RUN: sed -e "s|DIR|%/t|g" %t/build/vfs.notyaml.in > %t/build/vfs.notyaml
6*7847e445SMichael Spencer// RUN: clang-scan-deps -compilation-database %t/build/compile-commands.json \
7*7847e445SMichael Spencer// RUN:   -j 1 -format experimental-full --optimize-args=vfs,header-search > %t/deps.db
8*7847e445SMichael Spencer
9*7847e445SMichael Spencer// RUN: %deps-to-rsp %t/deps.db --module-name=A > %t/A.rsp
10*7847e445SMichael Spencer// RUN: cd %t && %clang @%t/A.rsp
11*7847e445SMichael Spencer
12*7847e445SMichael Spencer// Check that the following edge cases are handled by ivfsoverlay tracking
13*7847e445SMichael Spencer// * `-ivfsoverlay` args that depend on earlier `-ivfsoverlay` args.
14*7847e445SMichael Spencer
15*7847e445SMichael Spencer//--- build/compile-commands.json.in
16*7847e445SMichael Spencer
17*7847e445SMichael Spencer[
18*7847e445SMichael Spencer{
19*7847e445SMichael Spencer  "directory": "DIR",
20*7847e445SMichael Spencer  "command": "clang -c DIR/0.m -Imodules/A -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-module-maps -ivfsoverlay build/vfsoverlay.yaml -ivfsoverlay build/vfs.yaml",
21*7847e445SMichael Spencer  "file": "DIR/0.m"
22*7847e445SMichael Spencer}
23*7847e445SMichael Spencer]
24*7847e445SMichael Spencer
25*7847e445SMichael Spencer//--- build/vfsoverlay.yaml.in
26*7847e445SMichael Spencer
27*7847e445SMichael Spencer{
28*7847e445SMichael Spencer   "version":0,
29*7847e445SMichael Spencer   "case-sensitive":"false",
30*7847e445SMichael Spencer   "roots":[
31*7847e445SMichael Spencer      {
32*7847e445SMichael Spencer         "contents":[
33*7847e445SMichael Spencer            {
34*7847e445SMichael Spencer               "external-contents":"DIR/build/vfs.notyaml",
35*7847e445SMichael Spencer               "name":"vfs.yaml",
36*7847e445SMichael Spencer               "type":"file"
37*7847e445SMichael Spencer            }
38*7847e445SMichael Spencer         ],
39*7847e445SMichael Spencer         "name":"DIR/build",
40*7847e445SMichael Spencer         "type":"directory"
41*7847e445SMichael Spencer      }
42*7847e445SMichael Spencer   ]
43*7847e445SMichael Spencer}
44*7847e445SMichael Spencer
45*7847e445SMichael Spencer//--- build/vfs.notyaml.in
46*7847e445SMichael Spencer
47*7847e445SMichael Spencer{
48*7847e445SMichael Spencer   "version":0,
49*7847e445SMichael Spencer   "case-sensitive":"false",
50*7847e445SMichael Spencer   "roots":[
51*7847e445SMichael Spencer      {
52*7847e445SMichael Spencer         "contents":[
53*7847e445SMichael Spencer            {
54*7847e445SMichael Spencer               "external-contents":"DIR/build/module.modulemap",
55*7847e445SMichael Spencer               "name":"module.modulemap",
56*7847e445SMichael Spencer               "type":"file"
57*7847e445SMichael Spencer            },
58*7847e445SMichael Spencer            {
59*7847e445SMichael Spencer               "external-contents":"DIR/build/A.h",
60*7847e445SMichael Spencer               "name":"A.h",
61*7847e445SMichael Spencer               "type":"file"
62*7847e445SMichael Spencer            }
63*7847e445SMichael Spencer         ],
64*7847e445SMichael Spencer         "name":"DIR/modules/A",
65*7847e445SMichael Spencer         "type":"directory"
66*7847e445SMichael Spencer      }
67*7847e445SMichael Spencer   ]
68*7847e445SMichael Spencer}
69*7847e445SMichael Spencer
70*7847e445SMichael Spencer//--- build/module.modulemap
71*7847e445SMichael Spencer
72*7847e445SMichael Spencermodule A {
73*7847e445SMichael Spencer  umbrella header "A.h"
74*7847e445SMichael Spencer}
75*7847e445SMichael Spencer
76*7847e445SMichael Spencer//--- build/A.h
77*7847e445SMichael Spencer
78*7847e445SMichael Spencertypedef int A_t;
79*7847e445SMichael Spencer
80*7847e445SMichael Spencer//--- 0.m
81*7847e445SMichael Spencer
82*7847e445SMichael Spencer#include <A.h>
83*7847e445SMichael Spencer
84*7847e445SMichael SpencerA_t a = 0;
85