Move detection of libc++ include dirs to Driver on MacOS
authorIlya Biryukov <ibiryukov@google.com>
Wed, 5 Dec 2018 14:24:14 +0000 (14:24 +0000)
committerIlya Biryukov <ibiryukov@google.com>
Wed, 5 Dec 2018 14:24:14 +0000 (14:24 +0000)
commit44a40046c8137638be12d0ca19eeb3cb3174ce56
tree5f755b2e9d01065e72c648a8a38fff1a0fff7cfa
parent5419a3ce123b8ba557fab1ed722946d0efef1379
Move detection of libc++ include dirs to Driver on MacOS

Summary:
The intention is to make the tools replaying compilations from 'compile_commands.json'
(clang-tidy, clangd, etc.) find the same standard library as the original compiler
specified in 'compile_commands.json'.

Previously, the library detection logic was in the frontend (InitHeaderSearch.cpp) and relied
on the value of resource dir as an approximation of the compiler install dir. The new logic
uses the actual compiler install dir and is performed in the driver. This is consistent with
the C++ standard library detection on other platforms and allows to override the resource dir
in the tools using the compile_commands.json without altering the
standard library detection mechanism. The tools have to override the resource dir to make sure
they use a consistent version of the builtin headers.

There is still logic in InitHeaderSearch that attemps to add the absolute includes for the
the C++ standard library, so we keep passing the -stdlib=libc++ from the driver to the frontend
via cc1 args to avoid breaking that. In the long run, we should move this logic to the driver too,
but it could potentially break the library detection on other systems, so we don't tackle it in this
patch to keep its scope manageable.

This is a second attempt to fix the issue, first one was commited in r346652 and reverted in r346675.
The original fix relied on an ad-hoc propagation (bypassing the cc1 flags) of the install dir from the
driver to the frontend's HeaderSearchOptions. Unsurpisingly, the propagation was incomplete, it broke
the libc++ detection in clang itself, which caused LLDB tests to break.

The LLDB tests pass with new fix.

Reviewers: JDevlieghere, arphaman, EricWF

Reviewed By: arphaman

Subscribers: mclow.lists, ldionne, dexonsmith, ioeric, christof, kadircet, cfe-commits

Differential Revision: https://reviews.llvm.org/D54630

llvm-svn: 348365
clang-tools-extra/test/clang-tidy/Inputs/mock-libcxx/include/c++/v1/mock_vector [new file with mode: 0644]
clang-tools-extra/test/clang-tidy/clang-tidy-mac-libcxx.cpp [new file with mode: 0644]
clang/lib/Driver/ToolChains/Darwin.cpp
clang/lib/Driver/ToolChains/Darwin.h
clang/lib/Frontend/InitHeaderSearch.cpp
clang/test/Driver/darwin-stdlib.cpp
clang/test/Tooling/Inputs/mock-libcxx/include/c++/v1/mock_vector [new file with mode: 0644]
clang/test/Tooling/clang-check-mac-libcxx-abspath.cpp [new file with mode: 0644]
clang/test/Tooling/clang-check-mac-libcxx-relpath.cpp [new file with mode: 0644]