Author: Daniel Sanders Date: 2019-12-03T15:44:01-08:00 New Revision: 327894859cc41c1730807f8a179aa880203262f5
URL: https://github.com/llvm/llvm-project/commit/327894859cc41c1730807f8a179aa880203262f5 DIFF: https://github.com/llvm/llvm-project/commit/327894859cc41c1730807f8a179aa880203262f5.diff LOG: Fix `sed -e s@FOO@%/S@` and similar when there's @'s in the working directory Jenkins sometimes starts a new working directory by appending @2 (or incrementing the number if the @n suffix is already there). This causes several clang tests to fail as: s@INPUT_DIR@%/S/Inputs@g gets expanded to the invalid: s@INPUT_DIR@/path/to/workdir@2/Inputs@g ~~~~~~~~~~ where the part marked with ~'s is interpreted as the flags. These are invalid and the test fails. Previous fixes simply exchanged the @ character for another like | but that's just moving the problem. Address it by adding an expansion that escapes the @ character we're using as a delimiter as well as other magic characters in the replacement of sed's s@@@. There's still room for expansions to cause trouble though. One I ran into while testing this was that having a directory called foo@bar causes lots of `CHECK-NOT: foo` directives to match. There's also things like directories containing `\1` Added: Modified: clang/test/Index/index-module-with-vfs.m clang/test/Modules/crash-vfs-ivfsoverlay.m clang/test/Modules/double-quotes.m clang/test/Modules/framework-public-includes-private.m clang/test/VFS/external-names.c clang/test/VFS/framework-import.m clang/test/VFS/implicit-include.c clang/test/VFS/include-mixed-real-and-virtual.c clang/test/VFS/include-real-from-virtual.c clang/test/VFS/include-virtual-from-real.c clang/test/VFS/include.c clang/test/VFS/incomplete-umbrella.m clang/test/VFS/module-import.m clang/test/VFS/module_missing_vfs.m clang/test/VFS/real-path-found-first.m clang/test/VFS/relative-path.c clang/test/VFS/test_nonmodular.c clang/test/VFS/umbrella-framework-import-skipnonexist.m clang/test/VFS/vfsroot-include.c clang/test/VFS/vfsroot-module.m clang/test/VFS/vfsroot-with-overlay.c llvm/utils/lit/lit/TestRunner.py Removed: ################################################################################ diff --git a/clang/test/Index/index-module-with-vfs.m b/clang/test/Index/index-module-with-vfs.m index 46fa68dfa130..06944d372d49 100644 --- a/clang/test/Index/index-module-with-vfs.m +++ b/clang/test/Index/index-module-with-vfs.m @@ -6,7 +6,7 @@ void foo() { } // RUN: rm -rf %t.cache -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: c-index-test -index-file %s -fmodules-cache-path=%t.cache -fmodules -F %t -I %t \ // RUN: -ivfsoverlay %t.yaml -Xclang -fdisable-module-hash | FileCheck %s diff --git a/clang/test/Modules/crash-vfs-ivfsoverlay.m b/clang/test/Modules/crash-vfs-ivfsoverlay.m index 00992aa19fad..d2d2ccbd2546 100644 --- a/clang/test/Modules/crash-vfs-ivfsoverlay.m +++ b/clang/test/Modules/crash-vfs-ivfsoverlay.m @@ -3,7 +3,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t/m // RUN: cp %S/../VFS/Inputs/actual_module2.map %t/actual_module2.map -// RUN: sed -e "s@INPUT_DIR@%/t@g" -e "s@OUT_DIR@%/t/example@g" \ +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" -e "s@OUT_DIR@%{/t:regex_replacement}/example@g" \ // RUN: %S/../VFS/Inputs/vfsoverlay2.yaml > %t/srcvfs.yaml // RUN: env FORCE_CLANG_DIAGNOSTICS_CRASH= TMPDIR=%t TEMP=%t TMP=%t \ diff --git a/clang/test/Modules/double-quotes.m b/clang/test/Modules/double-quotes.m index 4ce712ccc6c5..99187fc26654 100644 --- a/clang/test/Modules/double-quotes.m +++ b/clang/test/Modules/double-quotes.m @@ -4,7 +4,7 @@ // RUN: %hmaptool write %S/Inputs/double-quotes/a.hmap.json %t/a.hmap // RUN: %hmaptool write %S/Inputs/double-quotes/x.hmap.json %t/x.hmap -// RUN: sed -e "s@TEST_DIR@%/S/Inputs/double-quotes@g" \ +// RUN: sed -e "s@TEST_DIR@%{/S:regex_replacement}/Inputs/double-quotes@g" \ // RUN: %S/Inputs/double-quotes/z.yaml > %t/z.yaml // The output with and without modules should be the same diff --git a/clang/test/Modules/framework-public-includes-private.m b/clang/test/Modules/framework-public-includes-private.m index 0f1e3a242a15..37c43e9a6390 100644 --- a/clang/test/Modules/framework-public-includes-private.m +++ b/clang/test/Modules/framework-public-includes-private.m @@ -4,7 +4,7 @@ // RUN: %hmaptool write %S/Inputs/framework-public-includes-private/a.hmap.json %t/a.hmap // RUN: %hmaptool write %S/Inputs/framework-public-includes-private/z.hmap.json %t/z.hmap -// RUN: sed -e "s@TEST_DIR@%/S/Inputs/framework-public-includes-private@g" \ +// RUN: sed -e "s@TEST_DIR@%{/S:regex_replacement}/Inputs/framework-public-includes-private@g" \ // RUN: %S/Inputs/framework-public-includes-private/z.yaml > %t/z.yaml // The output with and without modules should be the same, without modules first. diff --git a/clang/test/VFS/external-names.c b/clang/test/VFS/external-names.c index 1e12c930c35e..0500611c3e40 100644 --- a/clang/test/VFS/external-names.c +++ b/clang/test/VFS/external-names.c @@ -1,5 +1,5 @@ -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" -e "s@EXTERNAL_NAMES@true@" %S/Inputs/use-external-names.yaml > %t.external.yaml -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" -e "s@EXTERNAL_NAMES@false@" %S/Inputs/use-external-names.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" -e "s@EXTERNAL_NAMES@true@" %S/Inputs/use-external-names.yaml > %t.external.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" -e "s@EXTERNAL_NAMES@false@" %S/Inputs/use-external-names.yaml > %t.yaml #include "external-names.h" #ifdef REINCLUDE diff --git a/clang/test/VFS/framework-import.m b/clang/test/VFS/framework-import.m index 858f1f57fbd1..cd923c1dbe0f 100644 --- a/clang/test/VFS/framework-import.m +++ b/clang/test/VFS/framework-import.m @@ -1,4 +1,4 @@ -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -F %t -ivfsoverlay %t.yaml -fsyntax-only %s #import <SomeFramework/public_header.h> diff --git a/clang/test/VFS/implicit-include.c b/clang/test/VFS/implicit-include.c index 654e0a87de0e..06bff4b962db 100644 --- a/clang/test/VFS/implicit-include.c +++ b/clang/test/VFS/implicit-include.c @@ -1,4 +1,4 @@ -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -include "not_real.h" -fsyntax-only %s void foo() { diff --git a/clang/test/VFS/include-mixed-real-and-virtual.c b/clang/test/VFS/include-mixed-real-and-virtual.c index e4297c5737d9..b46ee9af9990 100644 --- a/clang/test/VFS/include-mixed-real-and-virtual.c +++ b/clang/test/VFS/include-mixed-real-and-virtual.c @@ -1,7 +1,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: echo "void baz(void);" > %t/real.h -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -fsyntax-only %s #include "not_real.h" diff --git a/clang/test/VFS/include-real-from-virtual.c b/clang/test/VFS/include-real-from-virtual.c index 3a41c4ea2c76..7398be735c5f 100644 --- a/clang/test/VFS/include-real-from-virtual.c +++ b/clang/test/VFS/include-real-from-virtual.c @@ -1,7 +1,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: echo "void baz(void);" > %t/real.h -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -fsyntax-only %s #include "include_real.h" diff --git a/clang/test/VFS/include-virtual-from-real.c b/clang/test/VFS/include-virtual-from-real.c index 0b0d4cd0025a..b50d5b729253 100644 --- a/clang/test/VFS/include-virtual-from-real.c +++ b/clang/test/VFS/include-virtual-from-real.c @@ -1,7 +1,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: echo '#include "not_real.h"' > %t/include_not_real.h -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -fsyntax-only %s #include "include_not_real.h" diff --git a/clang/test/VFS/include.c b/clang/test/VFS/include.c index 16a1bca71a72..a55e73a38178 100644 --- a/clang/test/VFS/include.c +++ b/clang/test/VFS/include.c @@ -1,4 +1,4 @@ -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -I %t -ivfsoverlay %t.yaml -fsyntax-only %s #include "not_real.h" diff --git a/clang/test/VFS/incomplete-umbrella.m b/clang/test/VFS/incomplete-umbrella.m index 5b2a1e0b4e1b..196313927bc0 100644 --- a/clang/test/VFS/incomplete-umbrella.m +++ b/clang/test/VFS/incomplete-umbrella.m @@ -1,7 +1,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t/Incomplete.framework/Headers // RUN: echo '// IncompleteReal.h' > %t/Incomplete.framework/Headers/IncompleteReal.h -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: not %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t \ // RUN: -ivfsoverlay %t.yaml -F %t -fsyntax-only %s 2>&1 | FileCheck %s diff --git a/clang/test/VFS/module-import.m b/clang/test/VFS/module-import.m index 336a72d31cfa..25d37bbf0a77 100644 --- a/clang/test/VFS/module-import.m +++ b/clang/test/VFS/module-import.m @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ivfsoverlay %t.yaml -I %t -fsyntax-only %s @import not_real; @@ -16,7 +16,7 @@ void foo() { #endif // Override the module map (vfsoverlay2 on top) -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay2.yaml > %t2.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay2.yaml > %t2.yaml // RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -ivfsoverlay %t.yaml -ivfsoverlay %t2.yaml -I %t -fsyntax-only %s // vfsoverlay2 not present diff --git a/clang/test/VFS/module_missing_vfs.m b/clang/test/VFS/module_missing_vfs.m index 6285ac064927..3cd8fc2c9eed 100644 --- a/clang/test/VFS/module_missing_vfs.m +++ b/clang/test/VFS/module_missing_vfs.m @@ -5,7 +5,7 @@ // ERROR: virtual filesystem overlay file '{{.*}}' not found // RUN: find %t/mcp -name "A-*.pcm" | count 1 -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/MissingVFS/vfsoverlay.yaml > %t/vfs.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/MissingVFS/vfsoverlay.yaml > %t/vfs.yaml // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/mcp -I %S/Inputs/MissingVFS %s -fsyntax-only -ivfsoverlay %t/vfs.yaml // RUN: find %t/mcp -name "A-*.pcm" | count 1 diff --git a/clang/test/VFS/real-path-found-first.m b/clang/test/VFS/real-path-found-first.m index 8d7d21bf7832..0d9a6de589fd 100644 --- a/clang/test/VFS/real-path-found-first.m +++ b/clang/test/VFS/real-path-found-first.m @@ -7,7 +7,7 @@ // RUN: rm -rf %t %t-cache %t.pch // RUN: mkdir -p %t/SomeFramework.framework/Modules // RUN: cat %S/Inputs/some_frame_module.map > %t/SomeFramework.framework/Modules/module.modulemap -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // Build // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t-cache -F %t \ diff --git a/clang/test/VFS/relative-path.c b/clang/test/VFS/relative-path.c index fc4ae151d87f..24313affc69d 100644 --- a/clang/test/VFS/relative-path.c +++ b/clang/test/VFS/relative-path.c @@ -1,6 +1,6 @@ // RUN: mkdir -p %t // RUN: cd %t -// RUN: sed -e "s@INPUT_DIR@%/S/Inputs@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsoverlay.yaml > %t.yaml +// RUN: sed -e "s@INPUT_DIR@%{/S:regex_replacement}/Inputs@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsoverlay.yaml > %t.yaml // RUN: %clang_cc1 -Werror -I . -ivfsoverlay %t.yaml -fsyntax-only %s #include "not_real.h" diff --git a/clang/test/VFS/test_nonmodular.c b/clang/test/VFS/test_nonmodular.c index dbc1f622f203..faec0e3a5162 100644 --- a/clang/test/VFS/test_nonmodular.c +++ b/clang/test/VFS/test_nonmodular.c @@ -3,7 +3,7 @@ // We can't have module.map inside Inputs/Nonmodular. // RUN: cp %S/Inputs/Nonmodular/Nonmodular.modulemap %t/outdir/module.modulemap // -// RUN: sed -e "s@VDIR@%/t/vdir@g" -e "s@IN_DIR@%/S@g" -e "s@OUT_DIR@%/t/outdir@g" %S/Inputs/Nonmodular/nonmodular-headers.yaml > %t/vdir/nonmodular-headers.yaml +// RUN: sed -e "s@VDIR@%{/t:regex_replacement}/vdir@g" -e "s@IN_DIR@%{/S:regex_replacement}@g" -e "s@OUT_DIR@%{/t:regex_replacement}/outdir@g" %S/Inputs/Nonmodular/nonmodular-headers.yaml > %t/vdir/nonmodular-headers.yaml // RUN: %clang_cc1 -fmodule-name=Nonmodular -fmodules -Wnon-modular-include-in-framework-module -verify -fimplicit-module-maps -fmodules-cache-path=%t/cache -ivfsoverlay %t/vdir/nonmodular-headers.yaml -I %S/Inputs -F %t/vdir -fsyntax-only %S/Inputs/Nonmodular/test.c // expected-no-diagnostics diff --git a/clang/test/VFS/umbrella-framework-import-skipnonexist.m b/clang/test/VFS/umbrella-framework-import-skipnonexist.m index 6f536b40a911..a778e26af162 100644 --- a/clang/test/VFS/umbrella-framework-import-skipnonexist.m +++ b/clang/test/VFS/umbrella-framework-import-skipnonexist.m @@ -4,7 +4,7 @@ // RUN: mkdir -p %t/vdir %t/outdir %t/cache // RUN: cp -R %S/Inputs/Bar.framework %t/outdir/ // -// RUN: sed -e "s@VDIR@%/t/vdir@g" -e "s@OUT_DIR@%/t/outdir@g" %S/Inputs/bar-headers.yaml > %t/vdir/bar-headers.yaml +// RUN: sed -e "s@VDIR@%{/t:regex_replacement}/vdir@g" -e "s@OUT_DIR@%{/t:regex_replacement}/outdir@g" %S/Inputs/bar-headers.yaml > %t/vdir/bar-headers.yaml // RUN: rm -f %t/outdir/Bar.framework/Headers/B.h // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/cache -ivfsoverlay %t/vdir/bar-headers.yaml -F %t/vdir -fsyntax-only %s diff --git a/clang/test/VFS/vfsroot-include.c b/clang/test/VFS/vfsroot-include.c index 2f3ff78bd6e9..2564004ea4b1 100644 --- a/clang/test/VFS/vfsroot-include.c +++ b/clang/test/VFS/vfsroot-include.c @@ -3,7 +3,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t -// RUN: sed -e "s@TEST_DIR@%/S@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsroot.yaml > %t.yaml +// RUN: sed -e "s@TEST_DIR@%{/S:regex_replacement}@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsroot.yaml > %t.yaml // RUN: not %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %S/Inputs -I /direct-vfs-root-files -fsyntax-only /tests/vfsroot-include.c 2>&1 | FileCheck %s // The line above tests that the compiler input file is looked up through VFS. diff --git a/clang/test/VFS/vfsroot-module.m b/clang/test/VFS/vfsroot-module.m index 979c5c281977..3ad3e19d4b37 100644 --- a/clang/test/VFS/vfsroot-module.m +++ b/clang/test/VFS/vfsroot-module.m @@ -3,7 +3,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t -// RUN: sed -e "s@TEST_DIR@%/S@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsroot.yaml > %t.yaml +// RUN: sed -e "s@TEST_DIR@%{/S:regex_replacement}@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsroot.yaml > %t.yaml // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/cache -ivfsoverlay %t.yaml -F %S/Inputs -fsyntax-only /tests/vfsroot-module.m // Test that a file missing from the VFS root is not found, even if it is diff --git a/clang/test/VFS/vfsroot-with-overlay.c b/clang/test/VFS/vfsroot-with-overlay.c index 04a275ed1580..4a2c64cb8734 100644 --- a/clang/test/VFS/vfsroot-with-overlay.c +++ b/clang/test/VFS/vfsroot-with-overlay.c @@ -3,7 +3,7 @@ // RUN: rm -rf %t // RUN: mkdir -p %t -// RUN: sed -e "s@TEST_DIR@%/S@g" -e "s@OUT_DIR@%/t@g" %S/Inputs/vfsroot.yaml > %t.yaml +// RUN: sed -e "s@TEST_DIR@%{/S:regex_replacement}@g" -e "s@OUT_DIR@%{/t:regex_replacement}@g" %S/Inputs/vfsroot.yaml > %t.yaml // RUN: sed -e "s@INPUT_DIR@/indirect-vfs-root-files@g" -e "s@OUT_DIR@/overlay-dir@g" %S/Inputs/vfsoverlay.yaml > %t/vfsoverlay.yaml // RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -ivfsoverlay /direct-vfs-root-files/vfsoverlay.yaml -I /overlay-dir -fsyntax-only /tests/vfsroot-with-overlay.c diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index 9f310a82d3b2..eec61f4b731c 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -1105,6 +1105,20 @@ def getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=False): ('%/T', tmpDir.replace('\\', '/')), ]) + # "%{/[STpst]:regex_replacement}" should be normalized like "%/[STpst]" but we're + # also in a regex replacement context of a s@@@ regex. + def regex_escape(s): + s = s.replace('@', '\@') + s = s.replace('&', '\&') + return s + substitutions.extend([ + ('%{/s:regex_replacement}', regex_escape(sourcepath.replace('\\', '/'))), + ('%{/S:regex_replacement}', regex_escape(sourcedir.replace('\\', '/'))), + ('%{/p:regex_replacement}', regex_escape(sourcedir.replace('\\', '/'))), + ('%{/t:regex_replacement}', regex_escape(tmpBase.replace('\\', '/')) + '.tmp'), + ('%{/T:regex_replacement}', regex_escape(tmpDir.replace('\\', '/'))), + ]) + # "%:[STpst]" are normalized paths without colons and without a leading # slash. substitutions.extend([ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits