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