From e40655618f462a4e809537e07a7bd3b005b4dcca Mon Sep 17 00:00:00 2001 From: Daniel Beer Date: Thu, 15 Aug 2019 16:50:12 -0400 Subject: [PATCH] Suppress more warnings using ToolApplicationSupport::suppressWarnings Signed-off-by: Daniel Beer --- src/tool_application_support.cpp | 2 +- t/029-tool-application-support.t.cpp | 46 ++++++++++++------- .../{ => build}/compile_commands.json | 0 .../029-tool-application-support/warnings.cpp | 6 +++ 4 files changed, 36 insertions(+), 18 deletions(-) rename t/data/029-tool-application-support/{ => build}/compile_commands.json (100%) diff --git a/src/tool_application_support.cpp b/src/tool_application_support.cpp index 1f5b664..7c0322d 100644 --- a/src/tool_application_support.cpp +++ b/src/tool_application_support.cpp @@ -102,7 +102,7 @@ void ToolApplicationSupport::suppressWarnings(clang::tooling::ClangTool &tool) { auto argAdjuster = [](const clang::tooling::CommandLineArguments &cliArgsIn, llvm::StringRef unused) { clang::tooling::CommandLineArguments cliArgsOut = cliArgsIn; - cliArgsOut.push_back("-w"); + cliArgsOut.push_back("-Wno-everything"); return cliArgsOut; }; tool.appendArgumentsAdjuster(argAdjuster); diff --git a/t/029-tool-application-support.t.cpp b/t/029-tool-application-support.t.cpp index c2ff5d6..d180a62 100644 --- a/t/029-tool-application-support.t.cpp +++ b/t/029-tool-application-support.t.cpp @@ -17,6 +17,11 @@ #include #include +llvm::cl::OptionCategory& optionCategory() { + static llvm::cl::OptionCategory s_optionCategory("test"); + return s_optionCategory; +} + class LLVMFatalError : public std::runtime_error { public: LLVMFatalError(const std::string& reason) @@ -47,8 +52,6 @@ struct ToolApplicationSupportTest : public ::testing::Test { std::string verifyInstallation(const std::vector& arguments) { try { - llvm::cl::OptionCategory category("test"); - std::vector argumentPtrs; for (const auto& item : arguments) { argumentPtrs.push_back(item.c_str()); @@ -56,7 +59,8 @@ struct ToolApplicationSupportTest : public ::testing::Test { int argc = argumentPtrs.size(); const char** argv = argumentPtrs.data(); - clang::tooling::CommonOptionsParser parser(argc, argv, category); + clang::tooling::CommonOptionsParser parser(argc, argv, + optionCategory()); clangmetatool::ToolApplicationSupport::verifyInstallation( parser.getCompilations(), @@ -104,7 +108,7 @@ TEST_F(ToolApplicationSupportTest, toolchain) TEST_F(ToolApplicationSupportTest, compilation_database) { std::string buildDir = - CMAKE_SOURCE_DIR "/t/data/029-tool-application-support"; + CMAKE_SOURCE_DIR "/t/data/029-tool-application-support/build"; EXPECT_EQ("", verifyInstallation({"tool", "/src/test1.cpp", "-p", buildDir})); @@ -140,23 +144,26 @@ class MyTool { TEST(suppress_warnings, test) { - llvm::cl::OptionCategory MyToolCategory("my-tool options"); + std::string source = + CMAKE_SOURCE_DIR "/t/data/029-tool-application-support/warnings.cpp"; - int argc = 4; const char* argv[] = { "foo", - CMAKE_SOURCE_DIR "/t/data/029-tool-application-support/warnings.cpp", + source.c_str(), "--", "-xc++" }; + int argc = sizeof argv / sizeof *argv; + + clang::tooling::CommonOptionsParser optionsParser + ( argc, argv, optionCategory() ); + + // We can't rely on 'optionsParser.getSourcePathList' because it is not + // reset between invocations, so has all of the bogus paths from the other + // tests. Instead we pass only the source relevant to this test. - clang::tooling::CommonOptionsParser - optionsParser - ( argc, argv, - MyToolCategory ); clang::tooling::RefactoringTool tool - ( optionsParser.getCompilations(), - optionsParser.getSourcePathList()); + ( optionsParser.getCompilations(), { source }); clangmetatool::ToolApplicationSupport::suppressWarnings(tool); @@ -166,10 +173,15 @@ TEST(suppress_warnings, test) clangmetatool::MetaToolFactory< clangmetatool::MetaTool > raf(tool.getReplacements()); - int r = tool.runAndSave(&raf); + int r = tool.run(&raf); + + // Ensure we have the one warning output by the tool, but not the macro + // warning from clang. - // Ensure we have the one warning output by the tool, - // but not the macro warning from clang - EXPECT_EQ(1, tdb.getNumWarnings()); + ASSERT_EQ(1, tdb.getNumWarnings()); EXPECT_EQ("oh noz, a thing happened!", tdb.warn_begin()->second); + + // Ensure we have no errors + + EXPECT_EQ(0, tdb.getNumErrors()); } diff --git a/t/data/029-tool-application-support/compile_commands.json b/t/data/029-tool-application-support/build/compile_commands.json similarity index 100% rename from t/data/029-tool-application-support/compile_commands.json rename to t/data/029-tool-application-support/build/compile_commands.json diff --git a/t/data/029-tool-application-support/warnings.cpp b/t/data/029-tool-application-support/warnings.cpp index f48ce8b..9ef0c12 100644 --- a/t/data/029-tool-application-support/warnings.cpp +++ b/t/data/029-tool-application-support/warnings.cpp @@ -1 +1,7 @@ #include "warnings.h" + +void foo() +{ + int value = 1; + short narrowing[1] = {value}; +}