Author: Kristóf Umann Date: 2021-09-14T16:11:11+02:00 New Revision: fb4d590a622f4031900516360c07ee6ace01c5e6
URL: https://github.com/llvm/llvm-project/commit/fb4d590a622f4031900516360c07ee6ace01c5e6 DIFF: https://github.com/llvm/llvm-project/commit/fb4d590a622f4031900516360c07ee6ace01c5e6.diff LOG: Fix a unittest file after D108695 when Z3 is enabled Added: Modified: clang/unittests/StaticAnalyzer/CheckerRegistration.h clang/unittests/StaticAnalyzer/FalsePositiveRefutationBRVisitorTest.cpp Removed: ################################################################################ diff --git a/clang/unittests/StaticAnalyzer/CheckerRegistration.h b/clang/unittests/StaticAnalyzer/CheckerRegistration.h index de804236229ad..bccdb94d29383 100644 --- a/clang/unittests/StaticAnalyzer/CheckerRegistration.h +++ b/clang/unittests/StaticAnalyzer/CheckerRegistration.h @@ -20,11 +20,27 @@ namespace clang { namespace ento { -class DiagConsumer : public PathDiagnosticConsumer { +class OnlyWarningsDiagConsumer : public PathDiagnosticConsumer { llvm::raw_ostream &Output; public: - DiagConsumer(llvm::raw_ostream &Output) : Output(Output) {} + OnlyWarningsDiagConsumer(llvm::raw_ostream &Output) : Output(Output) {} + void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> &Diags, + FilesMade *filesMade) override { + for (const auto *PD : Diags) { + Output << PD->getCheckerName() << ": "; + Output << PD->getShortDescription() << '\n'; + } + } + + StringRef getName() const override { return "Test"; } +}; + +class PathDiagConsumer : public PathDiagnosticConsumer { + llvm::raw_ostream &Output; + +public: + PathDiagConsumer(llvm::raw_ostream &Output) : Output(Output) {} void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> &Diags, FilesMade *filesMade) override { for (const auto *PD : Diags) { @@ -65,18 +81,24 @@ void addChecker(AnalysisASTConsumer &AnalysisConsumer, Fn1(AnalysisConsumer, AnOpts); } -template <AddCheckerFn... Fns> -class TestAction : public ASTFrontendAction { +template <AddCheckerFn... Fns> class TestAction : public ASTFrontendAction { llvm::raw_ostream &DiagsOutput; + bool OnlyEmitWarnings; public: - TestAction(llvm::raw_ostream &DiagsOutput) : DiagsOutput(DiagsOutput) {} + TestAction(llvm::raw_ostream &DiagsOutput, bool OnlyEmitWarnings) + : DiagsOutput(DiagsOutput), OnlyEmitWarnings(OnlyEmitWarnings) {} std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &Compiler, StringRef File) override { std::unique_ptr<AnalysisASTConsumer> AnalysisConsumer = CreateAnalysisConsumer(Compiler); - AnalysisConsumer->AddDiagnosticConsumer(new DiagConsumer(DiagsOutput)); + if (OnlyEmitWarnings) + AnalysisConsumer->AddDiagnosticConsumer( + new OnlyWarningsDiagConsumer(DiagsOutput)); + else + AnalysisConsumer->AddDiagnosticConsumer( + new PathDiagConsumer(DiagsOutput)); addChecker<Fns...>(*AnalysisConsumer, *Compiler.getAnalyzerOpts()); return std::move(AnalysisConsumer); } @@ -92,15 +114,16 @@ inline SmallString<80> getCurrentTestNameAsFileName() { } template <AddCheckerFn... Fns> -bool runCheckerOnCode(const std::string &Code, std::string &Diags) { +bool runCheckerOnCode(const std::string &Code, std::string &Diags, + bool OnlyEmitWarnings = false) { const SmallVectorImpl<char> &FileName = getCurrentTestNameAsFileName(); llvm::raw_string_ostream OS(Diags); - return tooling::runToolOnCode(std::make_unique<TestAction<Fns...>>(OS), Code, - FileName); + return tooling::runToolOnCode( + std::make_unique<TestAction<Fns...>>(OS, OnlyEmitWarnings), Code, + FileName); } -template <AddCheckerFn... Fns> -bool runCheckerOnCode(const std::string &Code) { +template <AddCheckerFn... Fns> bool runCheckerOnCode(const std::string &Code) { std::string Diags; return runCheckerOnCode<Fns...>(Code, Diags); } @@ -108,11 +131,13 @@ bool runCheckerOnCode(const std::string &Code) { template <AddCheckerFn... Fns> bool runCheckerOnCodeWithArgs(const std::string &Code, const std::vector<std::string> &Args, - std::string &Diags) { + std::string &Diags, + bool OnlyEmitWarnings = false) { const SmallVectorImpl<char> &FileName = getCurrentTestNameAsFileName(); llvm::raw_string_ostream OS(Diags); return tooling::runToolOnCodeWithArgs( - std::make_unique<TestAction<Fns...>>(OS), Code, Args, FileName); + std::make_unique<TestAction<Fns...>>(OS, OnlyEmitWarnings), Code, Args, + FileName); } template <AddCheckerFn... Fns> diff --git a/clang/unittests/StaticAnalyzer/FalsePositiveRefutationBRVisitorTest.cpp b/clang/unittests/StaticAnalyzer/FalsePositiveRefutationBRVisitorTest.cpp index beaaebdd36cf9..28dad31f54f3e 100644 --- a/clang/unittests/StaticAnalyzer/FalsePositiveRefutationBRVisitorTest.cpp +++ b/clang/unittests/StaticAnalyzer/FalsePositiveRefutationBRVisitorTest.cpp @@ -126,7 +126,7 @@ TEST_F(FalsePositiveRefutationBRVisitorTestBase, UnSatInTheMiddleNoReport) { std::string Diags; EXPECT_TRUE(runCheckerOnCodeWithArgs<addFalsePositiveGenerator>( - Code, LazyAssumeAndCrossCheckArgs, Diags)); + Code, LazyAssumeAndCrossCheckArgs, Diags, /*OnlyEmitWarnings=*/ true)); EXPECT_EQ(Diags, "test.FalsePositiveGenerator: REACHED_WITH_NO_CONTRADICTION\n"); // Single warning. The second report was invalidated by the visitor. @@ -134,7 +134,7 @@ TEST_F(FalsePositiveRefutationBRVisitorTestBase, UnSatInTheMiddleNoReport) { // Without enabling the crosscheck-with-z3 both reports are displayed. std::string Diags2; EXPECT_TRUE(runCheckerOnCodeWithArgs<addFalsePositiveGenerator>( - Code, LazyAssumeArgs, Diags2)); + Code, LazyAssumeArgs, Diags2, /*OnlyEmitWarnings=*/ true)); EXPECT_EQ(Diags2, "test.FalsePositiveGenerator: REACHED_WITH_NO_CONTRADICTION\n" "test.FalsePositiveGenerator: REACHED_WITH_CONTRADICTION\n"); @@ -157,7 +157,7 @@ TEST_F(FalsePositiveRefutationBRVisitorTestBase, })"; std::string Diags; EXPECT_TRUE(runCheckerOnCodeWithArgs<addFalsePositiveGenerator>( - Code, LazyAssumeAndCrossCheckArgs, Diags)); + Code, LazyAssumeAndCrossCheckArgs, Diags, /*OnlyEmitWarnings=*/ true)); EXPECT_EQ(Diags, "test.FalsePositiveGenerator: REACHED_WITH_NO_CONTRADICTION\n"); // Single warning. The second report was invalidated by the visitor. @@ -165,7 +165,7 @@ TEST_F(FalsePositiveRefutationBRVisitorTestBase, // Without enabling the crosscheck-with-z3 both reports are displayed. std::string Diags2; EXPECT_TRUE(runCheckerOnCodeWithArgs<addFalsePositiveGenerator>( - Code, LazyAssumeArgs, Diags2)); + Code, LazyAssumeArgs, Diags2, /*OnlyEmitWarnings=*/ true)); EXPECT_EQ(Diags2, "test.FalsePositiveGenerator: REACHED_WITH_NO_CONTRADICTION\n" "test.FalsePositiveGenerator: CAN_BE_TRUE\n"); @@ -204,7 +204,7 @@ TEST_F(FalsePositiveRefutationBRVisitorTestBase, std::string Diags; EXPECT_TRUE(runCheckerOnCodeWithArgs<addFalsePositiveGenerator>( - Code, LazyAssumeAndCrossCheckArgs, Diags)); + Code, LazyAssumeAndCrossCheckArgs, Diags, /*OnlyEmitWarnings=*/ true)); EXPECT_EQ(Diags, "test.FalsePositiveGenerator: REACHED_WITH_NO_CONTRADICTION\n"); // Single warning. The second report was invalidated by the visitor. @@ -212,7 +212,7 @@ TEST_F(FalsePositiveRefutationBRVisitorTestBase, // Without enabling the crosscheck-with-z3 both reports are displayed. std::string Diags2; EXPECT_TRUE(runCheckerOnCodeWithArgs<addFalsePositiveGenerator>( - Code, LazyAssumeArgs, Diags2)); + Code, LazyAssumeArgs, Diags2, /*OnlyEmitWarnings=*/ true)); EXPECT_EQ(Diags2, "test.FalsePositiveGenerator: REACHED_WITH_NO_CONTRADICTION\n" "test.FalsePositiveGenerator: CAN_BE_TRUE\n"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits