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