llvm-project/clang-tools-extra
Ilya Biryukov 44a40046c8 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
2018-12-05 14:24:14 +00:00
..
change-namespace A bit of AST matcher cleanup, NFC. 2018-11-25 02:41:01 +00:00
clang-apply-replacements Deduplicate replacements from diagnostics. 2018-09-25 08:24:07 +00:00
clang-doc [clang-doc] Switch to default to all-TUs executor 2018-10-26 19:11:34 +00:00
clang-move [clang-move] Remove clang:: qualifier 2018-10-11 16:09:26 +00:00
clang-query [clang-query] Continue if compilation command not found for some files 2018-12-05 02:02:40 +00:00
clang-reorder-fields [CMake] Use PRIVATE in target_link_libraries for executables 2017-12-05 21:49:56 +00:00
clang-tidy Revert "[clang-tidy] new check: bugprone-branch-clone" 2018-12-05 09:34:18 +00:00
clang-tidy-vs Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
clangd [clangd] Dont provide locations for non-existent files. 2018-12-05 11:57:15 +00:00
docs Revert "[clang-tidy] new check: bugprone-branch-clone" 2018-12-05 09:34:18 +00:00
include-fixer Replace hardcoded format styles in a few tools with the default style in libFormat. 2018-08-02 10:30:56 +00:00
modularize Remove unused c'tor. 2018-11-09 02:03:24 +00:00
pp-trace [pp-trace] Remove unused using directives 2018-09-18 06:57:58 +00:00
test Move detection of libc++ include dirs to Driver on MacOS 2018-12-05 14:24:14 +00:00
tool-template Port getLocStart -> getBeginLoc 2018-08-09 22:42:26 +00:00
unittests [clangd] Dont provide locations for non-existent files. 2018-12-05 11:57:15 +00:00
.arcconfig [clang-tools-extra] Set up .arcconfig to point to new Diffusion CTE repository 2017-11-27 15:58:25 +00:00
.gitignore
CMakeLists.txt [clang-tidy] Build it even without static analyzer 2018-10-01 20:24:22 +00:00
CODE_OWNERS.TXT Remove myself as owner of clang-query. 2018-11-15 22:02:10 +00:00
LICENSE.TXT Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
README.txt

README.txt

//===----------------------------------------------------------------------===//
// Clang Tools repository
//===----------------------------------------------------------------------===//

Welcome to the repository of extra Clang Tools.  This repository holds tools
that are developed as part of the LLVM compiler infrastructure project and the
Clang frontend.  These tools are kept in a separate "extra" repository to
allow lighter weight checkouts of the core Clang codebase.

This repository is only intended to be checked out inside of a full LLVM+Clang
tree, and in the 'tools/extra' subdirectory of the Clang checkout.

All discussion regarding Clang, Clang-based tools, and code in this repository
should be held using the standard Clang mailing lists:
  http://lists.llvm.org/mailman/listinfo/cfe-dev

Code review for this tree should take place on the standard Clang patch and
commit lists:
  http://lists.llvm.org/mailman/listinfo/cfe-commits

If you find a bug in these tools, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/