mirror of
https://github.com/intel/llvm.git
synced 2026-01-29 04:16:38 +08:00
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. llvm-svn: 202903
This commit is contained in:
@@ -733,8 +733,12 @@ VFSFromYAML *VFSFromYAML::create(MemoryBuffer *Buffer,
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (Path.empty())
|
||||
return error_code(errc::invalid_argument, system_category());
|
||||
@@ -753,7 +757,10 @@ ErrorOr<Entry *> VFSFromYAML::lookupPath(const Twine &Path_) {
|
||||
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
|
||||
|
||||
11
clang/test/VFS/relative-path.c
Normal file
11
clang/test/VFS/relative-path.c
Normal file
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user