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