rmaz updated this revision to Diff 400008. rmaz added a comment. Add comment to describe relative root path behaviour
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116174/new/ https://reviews.llvm.org/D116174 Files: clang/test/VFS/Inputs/vfsoverlay-root-relative.yaml clang/test/VFS/vfsoverlay-relative-root.c llvm/include/llvm/Support/VirtualFileSystem.h llvm/lib/Support/VirtualFileSystem.cpp Index: llvm/lib/Support/VirtualFileSystem.cpp =================================================================== --- llvm/lib/Support/VirtualFileSystem.cpp +++ llvm/lib/Support/VirtualFileSystem.cpp @@ -1649,10 +1649,19 @@ sys::path::Style::windows_backslash)) { path_style = sys::path::Style::windows_backslash; } else { - assert(NameValueNode && "Name presence should be checked earlier"); - error(NameValueNode, + // Relative VFS root entries are made absolute to the current working + // directory, then we can determine the path style from that. + auto EC = sys::fs::make_absolute(Name); + if (EC) { + assert(NameValueNode && "Name presence should be checked earlier"); + error( + NameValueNode, "entry with relative path at the root level is not discoverable"); - return nullptr; + return nullptr; + } + path_style = sys::path::is_absolute(Name, sys::path::Style::posix) + ? sys::path::Style::posix + : sys::path::Style::windows_backslash; } } Index: llvm/include/llvm/Support/VirtualFileSystem.h =================================================================== --- llvm/include/llvm/Support/VirtualFileSystem.h +++ llvm/include/llvm/Support/VirtualFileSystem.h @@ -547,6 +547,9 @@ /// } /// \endverbatim /// +/// The roots may be absolute or relative. If relative they will be made +/// absolute against the current working directory. +/// /// All configuration options are optional. /// 'case-sensitive': <boolean, default=(true for Posix, false for Windows)> /// 'use-external-names': <boolean, default=true> Index: clang/test/VFS/vfsoverlay-relative-root.c =================================================================== --- /dev/null +++ clang/test/VFS/vfsoverlay-relative-root.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 -Werror -ivfsoverlay %S/Inputs/vfsoverlay-root-relative.yaml -I virtual -fsyntax-only %s + +#include "virtual_header.h" Index: clang/test/VFS/Inputs/vfsoverlay-root-relative.yaml =================================================================== --- /dev/null +++ clang/test/VFS/Inputs/vfsoverlay-root-relative.yaml @@ -0,0 +1,17 @@ +{ + 'version': 0, + 'fallthrough': true, + 'overlay-relative': true, + 'roots': [ + { 'name': 'virtual', + 'type': 'directory', + 'contents': [ + { + 'external-contents': 'actual_header.h', + 'type': 'file', + 'name': 'virtual_header.h', + } + ] + } + ] +}
Index: llvm/lib/Support/VirtualFileSystem.cpp =================================================================== --- llvm/lib/Support/VirtualFileSystem.cpp +++ llvm/lib/Support/VirtualFileSystem.cpp @@ -1649,10 +1649,19 @@ sys::path::Style::windows_backslash)) { path_style = sys::path::Style::windows_backslash; } else { - assert(NameValueNode && "Name presence should be checked earlier"); - error(NameValueNode, + // Relative VFS root entries are made absolute to the current working + // directory, then we can determine the path style from that. + auto EC = sys::fs::make_absolute(Name); + if (EC) { + assert(NameValueNode && "Name presence should be checked earlier"); + error( + NameValueNode, "entry with relative path at the root level is not discoverable"); - return nullptr; + return nullptr; + } + path_style = sys::path::is_absolute(Name, sys::path::Style::posix) + ? sys::path::Style::posix + : sys::path::Style::windows_backslash; } } Index: llvm/include/llvm/Support/VirtualFileSystem.h =================================================================== --- llvm/include/llvm/Support/VirtualFileSystem.h +++ llvm/include/llvm/Support/VirtualFileSystem.h @@ -547,6 +547,9 @@ /// } /// \endverbatim /// +/// The roots may be absolute or relative. If relative they will be made +/// absolute against the current working directory. +/// /// All configuration options are optional. /// 'case-sensitive': <boolean, default=(true for Posix, false for Windows)> /// 'use-external-names': <boolean, default=true> Index: clang/test/VFS/vfsoverlay-relative-root.c =================================================================== --- /dev/null +++ clang/test/VFS/vfsoverlay-relative-root.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 -Werror -ivfsoverlay %S/Inputs/vfsoverlay-root-relative.yaml -I virtual -fsyntax-only %s + +#include "virtual_header.h" Index: clang/test/VFS/Inputs/vfsoverlay-root-relative.yaml =================================================================== --- /dev/null +++ clang/test/VFS/Inputs/vfsoverlay-root-relative.yaml @@ -0,0 +1,17 @@ +{ + 'version': 0, + 'fallthrough': true, + 'overlay-relative': true, + 'roots': [ + { 'name': 'virtual', + 'type': 'directory', + 'contents': [ + { + 'external-contents': 'actual_header.h', + 'type': 'file', + 'name': 'virtual_header.h', + } + ] + } + ] +}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits