I think c-index-test has the same problem: $ cat test.cc #include <iostream> $ out/gn/bin/c-index-test -write-pch foo.pch test.cc test.cc:1:10: fatal error: 'iostream' file not found
Since https://reviews.llvm.org/rL350714 was a driver-side fix and c-index-test doesn't use lib/Driver, it didn't do anything here. Can you take a look at c-index-test too? On Wed, Jan 9, 2019 at 8:15 AM Ilya Biryukov <ibiryu...@google.com> wrote: > Glad to help. The fix has landed. Let me know if the problem persists > after it's integrated. > > On Tue, Jan 8, 2019 at 7:36 PM Nico Weber <tha...@chromium.org> wrote: > >> That looks like it should help. Thanks for the quick fix! >> >> On Tue, Jan 8, 2019 at 1:11 PM Ilya Biryukov <ibiryu...@google.com> >> wrote: >> >>> Hi Nico, >>> >>> This is clearly a bug, it's supposed to search in a sibling directory. >>> Are you running clang as './clang' in the scripts? The code seems to >>> break in that case, https://reviews.llvm.org/D56446 should fix this. >>> >>> On Tue, Jan 8, 2019 at 5:12 PM Nico Weber <tha...@chromium.org> wrote: >>> >>>> It looks like clang now looks for libc++ headers in -internal-isystem >>>> Release+Asserts/bin/include/c++/v1 , compared to -internal-isystem >>>> Release+Asserts/include/c++/v1. `make install` puts the libc++ headers in >>>> Release+Asserts/include, the old location. Was this an intentional change? >>>> >>>> As-is, this seems to break chromium's clang ability to find libc++ >>>> headers (https://crbug.com/919761) because we bundle libc++ headers in >>>> an "include" directory that's a sibling to the "bin" directory (and have >>>> been doing so for 4.5 years, since >>>> https://codereview.chromium.org/281753002). >>>> >>>> On Mon, Nov 12, 2018 at 8:58 AM Ilya Biryukov via cfe-commits < >>>> cfe-commits@lists.llvm.org> wrote: >>>> >>>>> Author: ibiryukov >>>>> Date: Mon Nov 12 05:55:55 2018 >>>>> New Revision: 346652 >>>>> >>>>> URL: http://llvm.org/viewvc/llvm-project?rev=346652&view=rev >>>>> Log: >>>>> Make clang-based tools find libc++ on MacOS >>>>> >>>>> Summary: >>>>> When they read compiler args from compile_commands.json. >>>>> This change allows to run clang-based tools, like clang-tidy or clangd, >>>>> built from head using the compile_commands.json file produced for XCode >>>>> toolchains. >>>>> >>>>> On MacOS clang can find the C++ standard library relative to the >>>>> compiler installation dir. >>>>> >>>>> The logic to do this was based on resource dir as an approximation of >>>>> where the compiler is installed. This broke the tools that read >>>>> 'compile_commands.json' and don't ship with the compiler, as they >>>>> typically change resource dir. >>>>> >>>>> To workaround this, we now use compiler install dir detected by the >>>>> driver >>>>> to better mimic the behavior of the original compiler when replaying >>>>> the >>>>> compilations using other tools. >>>>> >>>>> Reviewers: sammccall, arphaman, EricWF >>>>> >>>>> Reviewed By: sammccall >>>>> >>>>> Subscribers: ioeric, christof, kadircet, cfe-commits >>>>> >>>>> Differential Revision: https://reviews.llvm.org/D54310 >>>>> >>>>> Added: >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/ >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/ >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c++/ >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c++/v1/ >>>>> >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c++/v1/mock_vector >>>>> cfe/trunk/test/Tooling/clang-check-mac-libcxx-abspath.cpp >>>>> cfe/trunk/test/Tooling/clang-check-mac-libcxx-relpath.cpp >>>>> Modified: >>>>> cfe/trunk/include/clang/Lex/HeaderSearchOptions.h >>>>> cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp >>>>> cfe/trunk/lib/Frontend/InitHeaderSearch.cpp >>>>> cfe/trunk/lib/Tooling/Tooling.cpp >>>>> >>>>> Modified: cfe/trunk/include/clang/Lex/HeaderSearchOptions.h >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearchOptions.h?rev=346652&r1=346651&r2=346652&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/include/clang/Lex/HeaderSearchOptions.h (original) >>>>> +++ cfe/trunk/include/clang/Lex/HeaderSearchOptions.h Mon Nov 12 >>>>> 05:55:55 2018 >>>>> @@ -108,6 +108,13 @@ public: >>>>> /// etc.). >>>>> std::string ResourceDir; >>>>> >>>>> + /// Compiler install dir as detected by the Driver. >>>>> + /// This is typically the directory that contains the clang >>>>> executable, i.e. >>>>> + /// the 'bin/' subdir of a clang distribution. >>>>> + /// Only used to add include dirs for libc++ on Darwin. Please >>>>> avoid relying >>>>> + /// on this field for other purposes. >>>>> + std::string InstallDir; >>>>> + >>>>> /// The directory used for the module cache. >>>>> std::string ModuleCachePath; >>>>> >>>>> >>>>> Modified: cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp?rev=346652&r1=346651&r2=346652&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp >>>>> (original) >>>>> +++ cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp Mon Nov >>>>> 12 05:55:55 2018 >>>>> @@ -11,17 +11,18 @@ >>>>> // >>>>> >>>>> >>>>> //===----------------------------------------------------------------------===// >>>>> >>>>> -#include "clang/Frontend/Utils.h" >>>>> #include "clang/Basic/DiagnosticOptions.h" >>>>> +#include "clang/Driver/Action.h" >>>>> #include "clang/Driver/Compilation.h" >>>>> #include "clang/Driver/Driver.h" >>>>> -#include "clang/Driver/Action.h" >>>>> #include "clang/Driver/Options.h" >>>>> #include "clang/Driver/Tool.h" >>>>> #include "clang/Frontend/CompilerInstance.h" >>>>> #include "clang/Frontend/FrontendDiagnostic.h" >>>>> +#include "clang/Frontend/Utils.h" >>>>> #include "llvm/Option/ArgList.h" >>>>> #include "llvm/Support/Host.h" >>>>> +#include "llvm/Support/Path.h" >>>>> using namespace clang; >>>>> using namespace llvm::opt; >>>>> >>>>> @@ -102,5 +103,8 @@ std::unique_ptr<CompilerInvocation> clan >>>>> CCArgs.size(), >>>>> *Diags)) >>>>> return nullptr; >>>>> + // Patch up the install dir, so we find the same standard library >>>>> as the >>>>> + // original compiler on MacOS. >>>>> + CI->getHeaderSearchOpts().InstallDir = TheDriver.getInstalledDir(); >>>>> return CI; >>>>> } >>>>> >>>>> Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=346652&r1=346651&r2=346652&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original) >>>>> +++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Mon Nov 12 05:55:55 >>>>> 2018 >>>>> @@ -476,14 +476,9 @@ void InitHeaderSearch::AddDefaultInclude >>>>> if (triple.isOSDarwin()) { >>>>> // On Darwin, libc++ may be installed alongside the compiler >>>>> in >>>>> // include/c++/v1. >>>>> - if (!HSOpts.ResourceDir.empty()) { >>>>> - // Remove version from foo/lib/clang/version >>>>> - StringRef NoVer = >>>>> llvm::sys::path::parent_path(HSOpts.ResourceDir); >>>>> - // Remove clang from foo/lib/clang >>>>> - StringRef Lib = llvm::sys::path::parent_path(NoVer); >>>>> - // Remove lib from foo/lib >>>>> - SmallString<128> P = llvm::sys::path::parent_path(Lib); >>>>> - >>>>> + if (!HSOpts.InstallDir.empty()) { >>>>> + // Get from foo/bin to foo. >>>>> + SmallString<128> >>>>> P(llvm::sys::path::parent_path(HSOpts.InstallDir)); >>>>> // Get foo/include/c++/v1 >>>>> llvm::sys::path::append(P, "include", "c++", "v1"); >>>>> AddUnmappedPath(P, CXXSystem, false); >>>>> >>>>> Modified: cfe/trunk/lib/Tooling/Tooling.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Tooling.cpp?rev=346652&r1=346651&r2=346652&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/lib/Tooling/Tooling.cpp (original) >>>>> +++ cfe/trunk/lib/Tooling/Tooling.cpp Mon Nov 12 05:55:55 2018 >>>>> @@ -327,6 +327,9 @@ bool ToolInvocation::run() { >>>>> Invocation->getPreprocessorOpts().addRemappedFile(It.getKey(), >>>>> >>>>> Input.release()); >>>>> } >>>>> + // Patch up the install dir, so we find the same standard library >>>>> as the >>>>> + // original compiler on MacOS. >>>>> + Invocation->getHeaderSearchOpts().InstallDir = >>>>> Driver->getInstalledDir(); >>>>> return runInvocation(BinaryName, Compilation.get(), >>>>> std::move(Invocation), >>>>> std::move(PCHContainerOps)); >>>>> } >>>>> >>>>> Added: >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c++/v1/mock_vector >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c%2B%2B/v1/mock_vector?rev=346652&view=auto >>>>> >>>>> ============================================================================== >>>>> --- >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c++/v1/mock_vector >>>>> (added) >>>>> +++ >>>>> cfe/trunk/test/Tooling/Inputs/mock-libcxx/include/c++/v1/mock_vector Mon >>>>> Nov 12 05:55:55 2018 >>>>> @@ -0,0 +1 @@ >>>>> +class vector {}; >>>>> >>>>> Added: cfe/trunk/test/Tooling/clang-check-mac-libcxx-abspath.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-mac-libcxx-abspath.cpp?rev=346652&view=auto >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Tooling/clang-check-mac-libcxx-abspath.cpp (added) >>>>> +++ cfe/trunk/test/Tooling/clang-check-mac-libcxx-abspath.cpp Mon Nov >>>>> 12 05:55:55 2018 >>>>> @@ -0,0 +1,17 @@ >>>>> +// Clang on MacOS can find libc++ living beside the installed >>>>> compiler. >>>>> +// This test makes sure our libTooling-based tools emulate this >>>>> properly. >>>>> +// >>>>> +// RUN: rm -rf %t >>>>> +// RUN: mkdir %t >>>>> +// >>>>> +// Install the mock libc++ (simulates the libc++ directory structure). >>>>> +// RUN: cp -r %S/Inputs/mock-libcxx %t/ >>>>> +// >>>>> +// Pretend clang is installed beside the mock library that we >>>>> provided. >>>>> +// RUN: echo >>>>> '[{"directory":"%t","command":"%t/mock-libcxx/bin/clang++ -stdlib=libc++ >>>>> -target x86_64-apple-darwin -c test.cpp","file":"test.cpp"}]' | sed -e >>>>> 's/\\/\//g' > %t/compile_commands.json >>>>> +// RUN: cp "%s" "%t/test.cpp" >>>>> +// clang-check will produce an error code if the mock library is not >>>>> found. >>>>> +// RUN: clang-check -p "%t" "%t/test.cpp" >>>>> + >>>>> +#include <mock_vector> >>>>> +vector v; >>>>> >>>>> Added: cfe/trunk/test/Tooling/clang-check-mac-libcxx-relpath.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-mac-libcxx-relpath.cpp?rev=346652&view=auto >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Tooling/clang-check-mac-libcxx-relpath.cpp (added) >>>>> +++ cfe/trunk/test/Tooling/clang-check-mac-libcxx-relpath.cpp Mon Nov >>>>> 12 05:55:55 2018 >>>>> @@ -0,0 +1,17 @@ >>>>> +// Clang on MacOS can find libc++ living beside the installed >>>>> compiler. >>>>> +// This test makes sure our libTooling-based tools emulate this >>>>> properly. >>>>> +// >>>>> +// RUN: rm -rf %t >>>>> +// RUN: mkdir %t >>>>> +// >>>>> +// Install the mock libc++ (simulates the libc++ directory structure). >>>>> +// RUN: cp -r %S/Inputs/mock-libcxx %t/ >>>>> +// >>>>> +// Pretend clang is installed beside the mock library that we >>>>> provided. >>>>> +// RUN: echo '[{"directory":"%t","command":"mock-libcxx/bin/clang++ >>>>> -stdlib=libc++ -target x86_64-apple-darwin -c >>>>> test.cpp","file":"test.cpp"}]' | sed -e 's/\\/\//g' > >>>>> %t/compile_commands.json >>>>> +// RUN: cp "%s" "%t/test.cpp" >>>>> +// clang-check will produce an error code if the mock library is not >>>>> found. >>>>> +// RUN: clang-check -p "%t" "%t/test.cpp" >>>>> + >>>>> +#include <mock_vector> >>>>> +vector v; >>>>> >>>>> >>>>> _______________________________________________ >>>>> cfe-commits mailing list >>>>> cfe-commits@lists.llvm.org >>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>> >>>> >>> >>> -- >>> Regards, >>> Ilya Biryukov >>> >> > > -- > Regards, > Ilya Biryukov >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits