[PATCH] D88721: [clangd][lit] Update document-link.test to respect custom resource-dir locations
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 2 05:32:51 PDT 2020
sammccall added a comment.
In D88721#2308361 <https://reviews.llvm.org/D88721#2308361>, @ArcsinX wrote:
> In D88721#2308296 <https://reviews.llvm.org/D88721#2308296>, @sammccall wrote:
>
>>> As far as Windows accepts forward and back slashes
>>
>> Note we don't rely on windows itself for this support.
>> All access through `llvm::sys::fs` APIs on windows ultimately goes through `widenPath` to convert to UTF-16, and this substitutes slashes.
>> So LLVM tools do always support `/` on windows and it's fairly common to rely on this for tests (abstraction is hard in lit tests).
>
> I am not sure that understood you correctly, but `widenPath` does nothing for me, if I pass mixed-slash path to it.
Ack, you're right. I've looked at this before, and was looking at this line:
https://github.com/llvm/llvm-project/blob/master/llvm/lib/Support/Windows/Path.inc#L103
But in the common case, we've already exited by then, so you're absolutely right...
> Code:
>
> std::string From("C:\\a/b\\c");
> SmallVector<wchar_t, 128> To;
> llvm::sys::windows::widenPath(From, To);
> std::wcerr << To.data();
>
> Output:
>
> C:\a/b\c
>
> So, if we imagine that Windows does not support `/`, then paths with `/` could not be opened with `llvm::sys::fs` API.
But at a higher level, ISTM the purpose of `widenPath` is exactly to produce a path that the win32 APIs will accept, including if the input has `/` (as shown by the long-path case I was confused by).
So the contract of the llvm functions ensuring that forward slashes are safe still seems to be there.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88721/new/
https://reviews.llvm.org/D88721
More information about the cfe-commits
mailing list