r202903 - Support relative paths in VFSFromYAML

NAKAMURA Takumi geek4civic at gmail.com
Wed Mar 5 07:58:05 PST 2014


2014-03-05 7:34 GMT+09:00 Ben Langmuir <blangmuir at apple.com>:
> Author: benlangmuir
> Date: Tue Mar  4 16:34:50 2014
> New Revision: 202903
>
> URL: http://llvm.org/viewvc/llvm-project?rev=202903&view=rev
> Log:
> Support relative paths in VFSFromYAML
>
> Use llvm::sys::fs::make_absolute to get an absolute path before
> matching. Also, allow "." directories to enable testing.  ".." is still
> not supported, and will require crossing file system boundaries to
> implement correctly.
>
> Added:
>     cfe/trunk/test/VFS/relative-path.c
> Modified:
>     cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>
> Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=202903&r1=202902&r2=202903&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original)
> +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Tue Mar  4 16:34:50 2014
> @@ -733,8 +733,12 @@ VFSFromYAML *VFSFromYAML::create(MemoryB
>  }
>
>  ErrorOr<Entry *> VFSFromYAML::lookupPath(const Twine &Path_) {
> -  SmallVector<char, 256> Storage;
> -  StringRef Path = Path_.toNullTerminatedStringRef(Storage);
> +  SmallString<256> Path;
> +  Path_.toVector(Path);
> +
> +  // Handle relative paths
> +  if (error_code EC = sys::fs::make_absolute(Path))
> +    return EC;

It makes incompatibility on win32.
make_absolute() adds the driveletter.

I have disabled Basic.VFSFromYAMLTests in r202952.

>
>    if (Path.empty())
>      return error_code(errc::invalid_argument, system_category());
> @@ -753,7 +757,10 @@ ErrorOr<Entry *> VFSFromYAML::lookupPath
>  ErrorOr<Entry *> VFSFromYAML::lookupPath(sys::path::const_iterator Start,
>                                           sys::path::const_iterator End,
>                                           Entry *From) {
> -  // FIXME: handle . and ..
> +  if (Start->equals("."))
> +    ++Start;
> +
> +  // FIXME: handle ..
>    if (CaseSensitive ? !Start->equals(From->getName())
>                      : !Start->equals_lower(From->getName()))
>      // failure to match
>
> Added: cfe/trunk/test/VFS/relative-path.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/relative-path.c?rev=202903&view=auto
> ==============================================================================
> --- cfe/trunk/test/VFS/relative-path.c (added)
> +++ cfe/trunk/test/VFS/relative-path.c Tue Mar  4 16:34:50 2014
> @@ -0,0 +1,11 @@
> +// 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: %clang_cc1 -Werror -I . -ivfsoverlay %t.yaml -fsyntax-only %s
> +// REQUIRES: shell
> +
> +#include "not_real.h"
> +
> +void foo() {
> +  bar();
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list