r351222 - [Tooling] Make clang-tool find libc++ dir on mac when running on a file without compilation database.
Vlad Tsyrklevich via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 15 16:42:59 PST 2019
This change was causing MSan/ASan failures on the sanitizer bots:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/28272
I reverted it in r351282.
On Tue, Jan 15, 2019 at 11:09 AM Haojian Wu via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: hokein
> Date: Tue Jan 15 11:05:50 2019
> New Revision: 351222
>
> URL: http://llvm.org/viewvc/llvm-project?rev=351222&view=rev
> Log:
> [Tooling] Make clang-tool find libc++ dir on mac when running on a file
> without compilation database.
>
> Summary:
> This is a regression of r348365.
>
> When clang-tools run on a file without a complation database (`clang-check
> /tmp/t.cc`),
> we will use fixed compilation database as a fallback. However the actual
> compiler
> path in the fallback complation command is just `clang-tool` which is
> insufficient to detect the libc++ dir.
>
> Reviewers: ilya-biryukov, EricWF
>
> Reviewed By: ilya-biryukov
>
> Subscribers: cfe-commits
>
> Differential Revision: https://reviews.llvm.org/D56680
>
> Added:
> cfe/trunk/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
> Modified:
> cfe/trunk/lib/Tooling/CompilationDatabase.cpp
>
> Modified: cfe/trunk/lib/Tooling/CompilationDatabase.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CompilationDatabase.cpp?rev=351222&r1=351221&r2=351222&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Tooling/CompilationDatabase.cpp (original)
> +++ cfe/trunk/lib/Tooling/CompilationDatabase.cpp Tue Jan 15 11:05:50 2019
> @@ -227,6 +227,16 @@ struct FilterUnusedFlags {
> }
> };
>
> +std::string GetClangToolCommand() {
> + static int Dummy;
> + std::string ClangExecutable =
> + llvm::sys::fs::getMainExecutable("clang", (void *)&Dummy);
> + SmallString<128> ClangToolPath;
> + ClangToolPath = llvm::sys::path::parent_path(ClangExecutable);
> + llvm::sys::path::append(ClangToolPath, "clang-tool");
> + return ClangToolPath.str();
> +}
> +
> } // namespace
>
> /// Strips any positional args and possible argv[0] from a command-line
> @@ -266,9 +276,9 @@ static bool stripPositionalArgs(std::vec
> Diagnostics));
> NewDriver->setCheckInputsExist(false);
>
> - // This becomes the new argv[0]. The value is actually not important as
> it
> - // isn't used for invoking Tools.
> - Args.insert(Args.begin(), "clang-tool");
> + // This becomes the new argv[0]. The value is used to detect libc++
> include
> + // dirs on Mac, it isn't used for other platforms.
> + Args.insert(Args.begin(), GetClangToolCommand().c_str());
>
> // By adding -c, we force the driver to treat compilation as the last
> phase.
> // It will then issue warnings via Diagnostics about un-used options
> that
> @@ -366,7 +376,7 @@ FixedCompilationDatabase::loadFromFile(S
>
> FixedCompilationDatabase::
> FixedCompilationDatabase(Twine Directory, ArrayRef<std::string>
> CommandLine) {
> - std::vector<std::string> ToolCommandLine(1, "clang-tool");
> + std::vector<std::string> ToolCommandLine(1, GetClangToolCommand());
> ToolCommandLine.insert(ToolCommandLine.end(),
> CommandLine.begin(), CommandLine.end());
> CompileCommands.emplace_back(Directory, StringRef(),
>
> Added:
> cfe/trunk/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp?rev=351222&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
> (added)
> +++ cfe/trunk/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
> Tue Jan 15 11:05:50 2019
> @@ -0,0 +1,16 @@
> +// Clang on MacOS can find libc++ living beside the installed compiler.
> +// This test makes sure our libTooling-based tools emulate this properly
> with
> +// fixed compilation database.
> +//
> +// RUN: rm -rf %t
> +// RUN: mkdir %t
> +//
> +// Install the mock libc++ (simulates the libc++ directory structure).
> +// RUN: cp -r %S/Inputs/mock-libcxx %t/
> +//
> +// RUN: cp clang-check %t/mock-libcxx/bin/
> +// RUN: cp "%s" "%t/test.cpp"
> +// RUN: %t/mock-libcxx/bin/clang-check -p "%t" "%t/test.cpp" --
> -stdlib=libc++
> +
> +#include <mock_vector>
> +vector v;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190115/1bd28baf/attachment.html>
More information about the cfe-commits
mailing list