[PATCH] D33788: Return a canonical path from getClangResourcePath()

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 2 12:04:40 PDT 2017


On 2 June 2017 at 11:39, Aaron Ballman via Phabricator via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> aaron.ballman added a comment.
>
> In https://reviews.llvm.org/D33788#771671, @bruno wrote:
>
> > > I'm unaware of any other API that canonicalizes the path, which is
> what users of this API are going to expect.
> >
> > You can also call `sys::path::remove_dots(Path,
> /*remove_dot_dot=*/true);`
>
>
> Yes, but that does not canonicalize the path. For instance, it won't
> handle doubled-up slashes or symlinks.
>

That's at least partly a feature, not a bug. Resolving symlinks and
removing x/.. are both potentially breaking changes when applied to the
path -- if you canonicalize, you break installations where the file is
actually a symlink to a file that does *not* also have a resource directory
relative to it.

The path with the bin/../lib in it is presumably the path from the clang
binary, not the path from libclang, so it's not clear to me that this patch
would even help -- the clang driver also does not canonicalize the path
(see SetInstallDir in tools/driver/driver.cpp).

Ultimately, the value returned from this API gets passed to POSIX functions
> which expect a canonical path. I don't think `remove_dots()` is sufficient.
> It should do the same thing as `getMainExecutable()`, I believe.


Note that we don't actually use getMainExecutable for the main clang
driver, just for tooling purposes, and it *also* does not canonicalize.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170602/9db0c669/attachment.html>


More information about the cfe-commits mailing list