Revert "[Tooling] Make clang-tool find libc++ dir on mac when running on a file without compilation database."

This reverts commits r351222 and r351229, they were causing ASan/MSan failures
on the sanitizer bots.

llvm-svn: 351282
This commit is contained in:
Vlad Tsyrklevich 2019-01-16 00:37:39 +00:00
parent 436735c3fe
commit e3226737ce
3 changed files with 38 additions and 48 deletions

View File

@ -227,16 +227,6 @@ 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 } // namespace
/// Strips any positional args and possible argv[0] from a command-line /// Strips any positional args and possible argv[0] from a command-line
@ -276,9 +266,9 @@ static bool stripPositionalArgs(std::vector<const char *> Args,
Diagnostics)); Diagnostics));
NewDriver->setCheckInputsExist(false); NewDriver->setCheckInputsExist(false);
// This becomes the new argv[0]. The value is used to detect libc++ include // This becomes the new argv[0]. The value is actually not important as it
// dirs on Mac, it isn't used for other platforms. // isn't used for invoking Tools.
Args.insert(Args.begin(), GetClangToolCommand().c_str()); Args.insert(Args.begin(), "clang-tool");
// By adding -c, we force the driver to treat compilation as the last phase. // 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 // It will then issue warnings via Diagnostics about un-used options that
@ -376,7 +366,7 @@ FixedCompilationDatabase::loadFromFile(StringRef Path, std::string &ErrorMsg) {
FixedCompilationDatabase:: FixedCompilationDatabase::
FixedCompilationDatabase(Twine Directory, ArrayRef<std::string> CommandLine) { FixedCompilationDatabase(Twine Directory, ArrayRef<std::string> CommandLine) {
std::vector<std::string> ToolCommandLine(1, GetClangToolCommand()); std::vector<std::string> ToolCommandLine(1, "clang-tool");
ToolCommandLine.insert(ToolCommandLine.end(), ToolCommandLine.insert(ToolCommandLine.end(),
CommandLine.begin(), CommandLine.end()); CommandLine.begin(), CommandLine.end());
CompileCommands.emplace_back(Directory, StringRef(), CompileCommands.emplace_back(Directory, StringRef(),

View File

@ -1,16 +0,0 @@
// 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;

View File

@ -14,15 +14,11 @@
#include "clang/Tooling/JSONCompilationDatabase.h" #include "clang/Tooling/JSONCompilationDatabase.h"
#include "clang/Tooling/Tooling.h" #include "clang/Tooling/Tooling.h"
#include "llvm/Support/Path.h" #include "llvm/Support/Path.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
namespace clang { namespace clang {
namespace tooling { namespace tooling {
using testing::ElementsAre;
using testing::EndsWith;
static void expectFailure(StringRef JSONDatabase, StringRef Explanation) { static void expectFailure(StringRef JSONDatabase, StringRef Explanation) {
std::string ErrorMessage; std::string ErrorMessage;
EXPECT_EQ(nullptr, EXPECT_EQ(nullptr,
@ -471,15 +467,21 @@ TEST(unescapeJsonCommandLine, ParsesSingleQuotedString) {
} }
TEST(FixedCompilationDatabase, ReturnsFixedCommandLine) { TEST(FixedCompilationDatabase, ReturnsFixedCommandLine) {
FixedCompilationDatabase Database(".", /*CommandLine*/ {"one", "two"}); std::vector<std::string> CommandLine;
CommandLine.push_back("one");
CommandLine.push_back("two");
FixedCompilationDatabase Database(".", CommandLine);
StringRef FileName("source"); StringRef FileName("source");
std::vector<CompileCommand> Result = std::vector<CompileCommand> Result =
Database.getCompileCommands(FileName); Database.getCompileCommands(FileName);
ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(1ul, Result.size());
std::vector<std::string> ExpectedCommandLine(1, "clang-tool");
ExpectedCommandLine.insert(ExpectedCommandLine.end(),
CommandLine.begin(), CommandLine.end());
ExpectedCommandLine.push_back("source");
EXPECT_EQ(".", Result[0].Directory); EXPECT_EQ(".", Result[0].Directory);
EXPECT_EQ(FileName, Result[0].Filename); EXPECT_EQ(FileName, Result[0].Filename);
EXPECT_THAT(Result[0].CommandLine, EXPECT_EQ(ExpectedCommandLine, Result[0].CommandLine);
ElementsAre(EndsWith("clang-tool"), "one", "two", "source"));
} }
TEST(FixedCompilationDatabase, GetAllFiles) { TEST(FixedCompilationDatabase, GetAllFiles) {
@ -535,8 +537,12 @@ TEST(ParseFixedCompilationDatabase, ReturnsArgumentsAfterDoubleDash) {
Database->getCompileCommands("source"); Database->getCompileCommands("source");
ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(1ul, Result.size());
ASSERT_EQ(".", Result[0].Directory); ASSERT_EQ(".", Result[0].Directory);
ASSERT_THAT(Result[0].CommandLine, ElementsAre(EndsWith("clang-tool"), std::vector<std::string> CommandLine;
"-DDEF3", "-DDEF4", "source")); CommandLine.push_back("clang-tool");
CommandLine.push_back("-DDEF3");
CommandLine.push_back("-DDEF4");
CommandLine.push_back("source");
ASSERT_EQ(CommandLine, Result[0].CommandLine);
EXPECT_EQ(2, Argc); EXPECT_EQ(2, Argc);
} }
@ -552,8 +558,10 @@ TEST(ParseFixedCompilationDatabase, ReturnsEmptyCommandLine) {
Database->getCompileCommands("source"); Database->getCompileCommands("source");
ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(1ul, Result.size());
ASSERT_EQ(".", Result[0].Directory); ASSERT_EQ(".", Result[0].Directory);
ASSERT_THAT(Result[0].CommandLine, std::vector<std::string> CommandLine;
ElementsAre(EndsWith("clang-tool"), "source")); CommandLine.push_back("clang-tool");
CommandLine.push_back("source");
ASSERT_EQ(CommandLine, Result[0].CommandLine);
EXPECT_EQ(2, Argc); EXPECT_EQ(2, Argc);
} }
@ -569,8 +577,12 @@ TEST(ParseFixedCompilationDatabase, HandlesPositionalArgs) {
Database->getCompileCommands("source"); Database->getCompileCommands("source");
ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(1ul, Result.size());
ASSERT_EQ(".", Result[0].Directory); ASSERT_EQ(".", Result[0].Directory);
ASSERT_THAT(Result[0].CommandLine, std::vector<std::string> Expected;
ElementsAre(EndsWith("clang-tool"), "-c", "-DDEF3", "source")); Expected.push_back("clang-tool");
Expected.push_back("-c");
Expected.push_back("-DDEF3");
Expected.push_back("source");
ASSERT_EQ(Expected, Result[0].CommandLine);
EXPECT_EQ(2, Argc); EXPECT_EQ(2, Argc);
} }
@ -587,9 +599,12 @@ TEST(ParseFixedCompilationDatabase, HandlesPositionalArgsSyntaxOnly) {
std::vector<CompileCommand> Result = Database->getCompileCommands("source"); std::vector<CompileCommand> Result = Database->getCompileCommands("source");
ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(1ul, Result.size());
ASSERT_EQ(".", Result[0].Directory); ASSERT_EQ(".", Result[0].Directory);
ASSERT_THAT( std::vector<std::string> Expected;
Result[0].CommandLine, Expected.push_back("clang-tool");
ElementsAre(EndsWith("clang-tool"), "-fsyntax-only", "-DDEF3", "source")); Expected.push_back("-fsyntax-only");
Expected.push_back("-DDEF3");
Expected.push_back("source");
ASSERT_EQ(Expected, Result[0].CommandLine);
} }
TEST(ParseFixedCompilationDatabase, HandlesArgv0) { TEST(ParseFixedCompilationDatabase, HandlesArgv0) {
@ -605,8 +620,9 @@ TEST(ParseFixedCompilationDatabase, HandlesArgv0) {
ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(1ul, Result.size());
ASSERT_EQ(".", Result[0].Directory); ASSERT_EQ(".", Result[0].Directory);
std::vector<std::string> Expected; std::vector<std::string> Expected;
ASSERT_THAT(Result[0].CommandLine, Expected.push_back("clang-tool");
ElementsAre(EndsWith("clang-tool"), "source")); Expected.push_back("source");
ASSERT_EQ(Expected, Result[0].CommandLine);
EXPECT_EQ(2, Argc); EXPECT_EQ(2, Argc);
} }