On 2 June 2017 at 11:39, Aaron Ballman via Phabricator via cfe-commits <
cfe-commits@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.
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to