[PATCH] D69074: [lld][test] Fix use of escape character in an lld test on Windows

Jordan Rupprecht via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 16 16:48:50 PDT 2019


rupprecht created this revision.
rupprecht added reviewers: evgeny777, ruiu, MaskRay.
Herald added subscribers: llvm-commits, arichardson, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.

Glob support was improved to accept `\` as an escape character in r375051, but reverted as r375052 due to a failure in this test on Windows.

The reason this failure seems Windows specific is because the path separator `\` is currently being relied on to be interpreted literally instead of as an escape character. Per documentation on linker input section wildcard patterns, this seems to be a bug in lld accepting `\` as a literal instead of an escape character.

For example:

  SECTIONS{ .foo :{ /path/to/foo.o(.foo) }} # OK: standard UNIX path
  SECTIONS{ .foo :{ C:/path/to/foo.o(.foo) }} # OK: windows accepts slashes in either direction
  SECTIONS{ .foo :{ C:\\path\\to\\foo.o(.foo) }} # OK: escape character used to match a literal \
  SECTIONS{ .foo :{ C:\path\to\foo.o(.foo) }} # BAD: this actually matches the path C:pathtofoo.o(.foo)

This avoids the problem in the test by using `%/T` in place of `%T` to normalize the path separator to `/`, which windows should also accept.

This patch just fixes the test, and glob support will be be relanded separately.

For a sample buildbot error, see: http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/11578/steps/stage%201%20check/logs/stdio


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D69074

Files:
  lld/test/ELF/linkerscript/filename-spec.s


Index: lld/test/ELF/linkerscript/filename-spec.s
===================================================================
--- lld/test/ELF/linkerscript/filename-spec.s
+++ lld/test/ELF/linkerscript/filename-spec.s
@@ -29,12 +29,12 @@
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
 # RUN:   %p/Inputs/filename-spec.s -o %T/filename-spec2.o
 
-# RUN: echo "SECTIONS{.foo :{ %T/filename-spec2.o(.foo) %T/filename-spec1.o(.foo) }}" > %t5.script
+# RUN: echo "SECTIONS{.foo :{ %/T/filename-spec2.o(.foo) %/T/filename-spec1.o(.foo) }}" > %t5.script
 # RUN: ld.lld -o %t5 --script %t5.script \
 # RUN:   %T/filename-spec1.o %T/filename-spec2.o
 # RUN: llvm-objdump -s %t5 | FileCheck --check-prefix=SECONDFIRST %s
 
-# RUN: echo "SECTIONS{.foo :{ %T/filename-spec1.o(.foo) %T/filename-spec2.o(.foo) }}" > %t6.script
+# RUN: echo "SECTIONS{.foo :{ %/T/filename-spec1.o(.foo) %/T/filename-spec2.o(.foo) }}" > %t6.script
 # RUN: ld.lld -o %t6 --script %t6.script \
 # RUN:   %T/filename-spec1.o %T/filename-spec2.o
 # RUN: llvm-objdump -s %t6 | FileCheck --check-prefix=FIRSTY %s


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69074.225329.patch
Type: text/x-patch
Size: 1080 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191016/74b43627/attachment.bin>


More information about the llvm-commits mailing list