From 54febeb51dbb43ec05b238d884d2b17c739e01ca Mon Sep 17 00:00:00 2001 From: Vlad Tsyrklevich Date: Wed, 16 Jan 2019 00:37:39 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@351282 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Tooling/CompilationDatabase.cpp | 18 ++----- ...-check-mac-libcxx-fixed-compilation-db.cpp | 16 ------ unittests/Tooling/CompilationDatabaseTest.cpp | 52 ++++++++++++------- 3 files changed, 38 insertions(+), 48 deletions(-) delete mode 100644 test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp diff --git a/lib/Tooling/CompilationDatabase.cpp b/lib/Tooling/CompilationDatabase.cpp index 032250b2d9..246d3c0a78 100644 --- a/lib/Tooling/CompilationDatabase.cpp +++ b/lib/Tooling/CompilationDatabase.cpp @@ -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 /// Strips any positional args and possible argv[0] from a command-line @@ -276,9 +266,9 @@ static bool stripPositionalArgs(std::vector Args, Diagnostics)); NewDriver->setCheckInputsExist(false); - // 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()); + // 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"); // 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 @@ -376,7 +366,7 @@ FixedCompilationDatabase::loadFromFile(StringRef Path, std::string &ErrorMsg) { FixedCompilationDatabase:: FixedCompilationDatabase(Twine Directory, ArrayRef CommandLine) { - std::vector ToolCommandLine(1, GetClangToolCommand()); + std::vector ToolCommandLine(1, "clang-tool"); ToolCommandLine.insert(ToolCommandLine.end(), CommandLine.begin(), CommandLine.end()); CompileCommands.emplace_back(Directory, StringRef(), diff --git a/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp b/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp deleted file mode 100644 index b072380c04..0000000000 --- a/test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp +++ /dev/null @@ -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 -vector v; diff --git a/unittests/Tooling/CompilationDatabaseTest.cpp b/unittests/Tooling/CompilationDatabaseTest.cpp index 949d6a3b73..125ba4896e 100644 --- a/unittests/Tooling/CompilationDatabaseTest.cpp +++ b/unittests/Tooling/CompilationDatabaseTest.cpp @@ -14,15 +14,11 @@ #include "clang/Tooling/JSONCompilationDatabase.h" #include "clang/Tooling/Tooling.h" #include "llvm/Support/Path.h" -#include "gmock/gmock.h" #include "gtest/gtest.h" namespace clang { namespace tooling { -using testing::ElementsAre; -using testing::EndsWith; - static void expectFailure(StringRef JSONDatabase, StringRef Explanation) { std::string ErrorMessage; EXPECT_EQ(nullptr, @@ -471,15 +467,21 @@ TEST(unescapeJsonCommandLine, ParsesSingleQuotedString) { } TEST(FixedCompilationDatabase, ReturnsFixedCommandLine) { - FixedCompilationDatabase Database(".", /*CommandLine*/ {"one", "two"}); + std::vector CommandLine; + CommandLine.push_back("one"); + CommandLine.push_back("two"); + FixedCompilationDatabase Database(".", CommandLine); StringRef FileName("source"); std::vector Result = Database.getCompileCommands(FileName); ASSERT_EQ(1ul, Result.size()); + std::vector ExpectedCommandLine(1, "clang-tool"); + ExpectedCommandLine.insert(ExpectedCommandLine.end(), + CommandLine.begin(), CommandLine.end()); + ExpectedCommandLine.push_back("source"); EXPECT_EQ(".", Result[0].Directory); EXPECT_EQ(FileName, Result[0].Filename); - EXPECT_THAT(Result[0].CommandLine, - ElementsAre(EndsWith("clang-tool"), "one", "two", "source")); + EXPECT_EQ(ExpectedCommandLine, Result[0].CommandLine); } TEST(FixedCompilationDatabase, GetAllFiles) { @@ -535,8 +537,12 @@ TEST(ParseFixedCompilationDatabase, ReturnsArgumentsAfterDoubleDash) { Database->getCompileCommands("source"); ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(".", Result[0].Directory); - ASSERT_THAT(Result[0].CommandLine, ElementsAre(EndsWith("clang-tool"), - "-DDEF3", "-DDEF4", "source")); + std::vector CommandLine; + 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); } @@ -552,8 +558,10 @@ TEST(ParseFixedCompilationDatabase, ReturnsEmptyCommandLine) { Database->getCompileCommands("source"); ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(".", Result[0].Directory); - ASSERT_THAT(Result[0].CommandLine, - ElementsAre(EndsWith("clang-tool"), "source")); + std::vector CommandLine; + CommandLine.push_back("clang-tool"); + CommandLine.push_back("source"); + ASSERT_EQ(CommandLine, Result[0].CommandLine); EXPECT_EQ(2, Argc); } @@ -569,8 +577,12 @@ TEST(ParseFixedCompilationDatabase, HandlesPositionalArgs) { Database->getCompileCommands("source"); ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(".", Result[0].Directory); - ASSERT_THAT(Result[0].CommandLine, - ElementsAre(EndsWith("clang-tool"), "-c", "-DDEF3", "source")); + std::vector Expected; + 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); } @@ -587,9 +599,12 @@ TEST(ParseFixedCompilationDatabase, HandlesPositionalArgsSyntaxOnly) { std::vector Result = Database->getCompileCommands("source"); ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(".", Result[0].Directory); - ASSERT_THAT( - Result[0].CommandLine, - ElementsAre(EndsWith("clang-tool"), "-fsyntax-only", "-DDEF3", "source")); + std::vector Expected; + Expected.push_back("clang-tool"); + Expected.push_back("-fsyntax-only"); + Expected.push_back("-DDEF3"); + Expected.push_back("source"); + ASSERT_EQ(Expected, Result[0].CommandLine); } TEST(ParseFixedCompilationDatabase, HandlesArgv0) { @@ -605,8 +620,9 @@ TEST(ParseFixedCompilationDatabase, HandlesArgv0) { ASSERT_EQ(1ul, Result.size()); ASSERT_EQ(".", Result[0].Directory); std::vector Expected; - ASSERT_THAT(Result[0].CommandLine, - ElementsAre(EndsWith("clang-tool"), "source")); + Expected.push_back("clang-tool"); + Expected.push_back("source"); + ASSERT_EQ(Expected, Result[0].CommandLine); EXPECT_EQ(2, Argc); } -- 2.40.0