r202903 - Support relative paths in VFSFromYAML

Ben Langmuir blangmuir at apple.com
Wed Mar 5 08:31:33 PST 2014


Thanks, I’ll take a look.

Ben

On Mar 5, 2014, at 7:58 AM, NAKAMURA Takumi <geek4civic at gmail.com> wrote:

> 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