xref: /llvm-project/clang/test/VFS/fallback.c (revision 7c1d9b15eee3a34678addab2bab66f3020ac0753)
1502f14d6SBen Barham // RUN: rm -rf %t
2502f14d6SBen Barham // RUN: split-file %s %t
3502f14d6SBen Barham 
4502f14d6SBen Barham // Test fallback directory remapping, ie. a directory "Base" which is used as
5502f14d6SBen Barham // a fallback if files are missing from "UseFirst"
6502f14d6SBen Barham 
7502f14d6SBen Barham // RUN: sed -e "s@EXTERNAL_DIR@%{/t:regex_replacement}/Both/Base@g" -e "s@NAME_DIR@%{/t:regex_replacement}/Both/UseFirst@g" %t/vfs/base.yaml > %t/vfs/both.yaml
8502f14d6SBen Barham 
9502f14d6SBen Barham // RUN: cp -R %t/Both %t/UseFirstOnly
10502f14d6SBen Barham // RUN: rm -rf %t/UseFirstOnly/Base
11502f14d6SBen Barham // RUN: sed -e "s@EXTERNAL_DIR@%{/t:regex_replacement}/UseFirstOnly/Base@g" -e "s@NAME_DIR@%{/t:regex_replacement}/UseFirstOnly/UseFirst@g" %t/vfs/base.yaml > %t/vfs/use-first-only.yaml
12502f14d6SBen Barham 
13502f14d6SBen Barham // RUN: cp -R %t/Both %t/BaseOnly
14502f14d6SBen Barham // RUN: rm -rf %t/BaseOnly/UseFirst
15502f14d6SBen Barham // RUN: sed -e "s@EXTERNAL_DIR@%{/t:regex_replacement}/BaseOnly/Base@g" -e "s@NAME_DIR@%{/t:regex_replacement}/BaseOnly/UseFirst@g" %t/vfs/base.yaml > %t/vfs/base-only.yaml
16502f14d6SBen Barham 
17502f14d6SBen Barham // RUN: cp -R %t/Both %t/BFallback
18502f14d6SBen Barham // RUN: rm %t/BFallback/UseFirst/B.h
19502f14d6SBen Barham // RUN: sed -e "s@EXTERNAL_DIR@%{/t:regex_replacement}/BFallback/Base@g" -e "s@NAME_DIR@%{/t:regex_replacement}/BFallback/UseFirst@g" %t/vfs/base.yaml > %t/vfs/b-fallback.yaml
20502f14d6SBen Barham 
21502f14d6SBen Barham // RUN: cp -R %t/Both %t/CFallback
22502f14d6SBen Barham // RUN: rm %t/CFallback/UseFirst/C.h
23502f14d6SBen Barham // RUN: sed -e "s@EXTERNAL_DIR@%{/t:regex_replacement}/CFallback/Base@g" -e "s@NAME_DIR@%{/t:regex_replacement}/CFallback/UseFirst@g" %t/vfs/base.yaml > %t/vfs/c-fallback.yaml
24502f14d6SBen Barham 
25502f14d6SBen Barham // Both B.h and C.h are in both folders
26*7c1d9b15SFangrui Song // RUN: %clang_cc1 -Werror -I %t/Both/UseFirst -ivfsoverlay %t/vfs/both.yaml -E -C %t/main.c 2>&1 | FileCheck --check-prefix=IN_UF %s
27502f14d6SBen Barham 
28502f14d6SBen Barham // IN_UF: # 1 "{{.*(/|\\\\)UseFirst(/|\\\\)}}B.h"
29502f14d6SBen Barham // IN_UF-NEXT: // B.h in UseFirst
30502f14d6SBen Barham // IN_UF: # 1 "{{.*(/|\\\\)UseFirst(/|\\\\)}}C.h"
31502f14d6SBen Barham // IN_UF-NEXT: // C.h in UseFirst
32502f14d6SBen Barham 
33502f14d6SBen Barham // Base missing, so now they are only in UseFirst
34*7c1d9b15SFangrui Song // RUN: %clang_cc1 -Werror -I %t/UseFirstOnly/UseFirst -ivfsoverlay %t/vfs/use-first-only.yaml -E -C %t/main.c 2>&1 | FileCheck --check-prefix=IN_UF %s
35502f14d6SBen Barham 
36502f14d6SBen Barham // UseFirst missing, fallback to Base
37*7c1d9b15SFangrui Song // RUN: %clang_cc1 -Werror -I %t/BaseOnly/UseFirst -ivfsoverlay %t/vfs/base-only.yaml -E -C %t/main.c 2>&1 | FileCheck --check-prefix=IN_BASE %s
38502f14d6SBen Barham 
39502f14d6SBen Barham // IN_BASE: # 1 "{{.*(/|\\\\)Base(/|\\\\)}}B.h"
40502f14d6SBen Barham // IN_BASE-NEXT: // B.h in Base
41502f14d6SBen Barham // IN_BASE: # 1 "{{.*(/|\\\\)Base(/|\\\\)}}C.h"
42502f14d6SBen Barham // IN_BASE-NEXT: // C.h in Base
43502f14d6SBen Barham 
44502f14d6SBen Barham // B.h missing from UseFirst
45*7c1d9b15SFangrui Song // RUN: %clang_cc1 -Werror -I %t/BFallback/UseFirst -ivfsoverlay %t/vfs/b-fallback.yaml -E -C %t/main.c 2>&1 | FileCheck --check-prefix=B_FALLBACK %s
46502f14d6SBen Barham 
47502f14d6SBen Barham // B_FALLBACK: # 1 "{{.*(/|\\\\)Base(/|\\\\)}}B.h"
48502f14d6SBen Barham // B_FALLBACK-NEXT: // B.h in Base
49502f14d6SBen Barham // B_FALLBACK: # 1 "{{.*(/|\\\\)UseFirst(/|\\\\)}}C.h"
50502f14d6SBen Barham // B_FALLBACK-NEXT: // C.h in UseFirst
51502f14d6SBen Barham 
52502f14d6SBen Barham // C.h missing from UseFirst
53*7c1d9b15SFangrui Song // RUN: %clang_cc1 -Werror -I %t/CFallback/UseFirst -ivfsoverlay %t/vfs/c-fallback.yaml -E -C %t/main.c 2>&1 | FileCheck --check-prefix=C_FALLBACK %s
54502f14d6SBen Barham 
55502f14d6SBen Barham // C_FALLBACK: # 1 "{{.*(/|\\\\)UseFirst(/|\\\\)}}B.h"
56502f14d6SBen Barham // C_FALLBACK-NEXT: // B.h in UseFirst
57502f14d6SBen Barham // C_FALLBACK: # 1 "{{.*(/|\\\\)Base(/|\\\\)}}C.h"
58502f14d6SBen Barham // C_FALLBACK-NEXT: // C.h in Base
59502f14d6SBen Barham 
60502f14d6SBen Barham //--- main.c
61502f14d6SBen Barham #include "B.h"
62502f14d6SBen Barham 
63502f14d6SBen Barham //--- Both/UseFirst/B.h
64502f14d6SBen Barham // B.h in UseFirst
65502f14d6SBen Barham #include "C.h"
66502f14d6SBen Barham 
67502f14d6SBen Barham //--- Both/UseFirst/C.h
68502f14d6SBen Barham // C.h in UseFirst
69502f14d6SBen Barham 
70502f14d6SBen Barham //--- Both/Base/B.h
71502f14d6SBen Barham // B.h in Base
72502f14d6SBen Barham #include "C.h"
73502f14d6SBen Barham 
74502f14d6SBen Barham //--- Both/Base/C.h
75502f14d6SBen Barham // C.h in Base
76502f14d6SBen Barham 
77502f14d6SBen Barham //--- vfs/base.yaml
78502f14d6SBen Barham {
79502f14d6SBen Barham   'version' : 0,
80502f14d6SBen Barham       'redirecting-with' : 'fallback',
81502f14d6SBen Barham                            'roots' : [
82502f14d6SBen Barham                              {'name' : 'NAME_DIR',
83502f14d6SBen Barham                               'type' : 'directory-remap',
84502f14d6SBen Barham                               'external-contents' : 'EXTERNAL_DIR'}
85502f14d6SBen Barham                            ]
86502f14d6SBen Barham }
87