Sorry for the breakage. All issues should be fixed by now. On Thu, Jun 28, 2018 at 8:26 AM Mikael Holmén <mikael.hol...@ericsson.com> wrote:
> Hi, > > I get the same compilation error when I compile with clang 3.6.0. > > Revert? > > Regards, > Mikael > > On 06/28/2018 03:16 AM, via cfe-commits wrote: > > Hi, this commit also broke our internal bot for a different reason: > > > > FAILED: /usr/lib/ccache/clang++ -DGTEST_HAS_RTTI=0 > > -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_LANG_CXX11=1 -D_DEBUG -D_GNU_SOURCE > > -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS > > -Itools/clang/unittests/StaticAnalyzer > > > -I/home/siadmin/jenkins/w/opensource/opensource_build/llvm/tools/clang/unittests/StaticAnalyzer > > > > -I/home/siadmin/jenkins/w/opensource/opensource_build/llvm/tools/clang/include > > > -Itools/clang/include -Iinclude > > -I/home/siadmin/jenkins/w/opensource/opensource_build/llvm/include > > > -I/home/siadmin/jenkins/w/opensource/opensource_build/llvm/utils/unittest/googletest/include > > > > -I/home/siadmin/jenkins/w/opensource/opensource_build/llvm/utils/unittest/googlemock/include > > > -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall > > -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual > > -Wmissing-field-initializers -pedantic -Wno-long-long > > -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor > > -Wstring-conversion -fdiagnostics-color -ffunction-sections > > -fdata-sections -fno-common -Woverloaded-virtual -Wno-nested-anon-types > > -O3 -UNDEBUG -Wno-variadic-macros > > -Wno-gnu-zero-variadic-macro-arguments -fno-exceptions -fno-rtti -MMD > > -MT > > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o > > > -MF > > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o.d > > > -o > > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o > > > -c > > > /home/siadmin/jenkins/w/opensource/opensource_build/llvm/tools/clang/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp > > > > > /home/siadmin/jenkins/w/opensource/opensource_build/llvm/tools/clang/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp:64:12: > > > error: no viable conversion from > > 'unique_ptr<clang::ento::AnalysisASTConsumer>' to > > 'unique_ptr<clang::ASTConsumer>' > > > > return AnalysisConsumer; > > > > ^~~~~~~~~~~~~~~~ > > > > > /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unique_ptr.h:157:17: > > > note: candidate constructor not viable: no known conversion from > > 'std::unique_ptr<AnalysisASTConsumer>' to 'nullptr_t' for 1st argument > > > > constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { } > > > > ^ > > > > > /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unique_ptr.h:160:7: > > > note: candidate constructor not viable: no known conversion from > > 'std::unique_ptr<AnalysisASTConsumer>' to > > 'std::unique_ptr<clang::ASTConsumer, > > std::default_delete<clang::ASTConsumer> > &&' for 1st argument > > > > unique_ptr(unique_ptr&& __u) noexcept > > > > ^ > > > > > /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unique_ptr.h:169:2: > > > note: candidate constructor [with _Up = > > clang::ento::AnalysisASTConsumer, _Ep = > > std::default_delete<clang::ento::AnalysisASTConsumer>, $2 = void] not > > viable: no known conversion from 'std::unique_ptr<AnalysisASTConsumer>' > > to 'unique_ptr<clang::ento::AnalysisASTConsumer, > > std::default_delete<clang::ento::AnalysisASTConsumer> > &&' for 1st > argument > > > > unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept > > > > ^ > > > > > /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unique_ptr.h:273:7: > > > note: candidate constructor not viable: no known conversion from > > 'std::unique_ptr<AnalysisASTConsumer>' to 'const > > std::unique_ptr<clang::ASTConsumer, > > std::default_delete<clang::ASTConsumer> > &' for 1st argument > > > > unique_ptr(const unique_ptr&) = delete; > > > > ^ > > > > > /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unique_ptr.h:176:2: > > > note: candidate template ignored: could not match 'auto_ptr' against > > 'unique_ptr' > > > > unique_ptr(auto_ptr<_Up>&& __u) noexcept; > > > > ^ > > > > 1 error generated. > > > > Douglas Yung > > > > *From:*cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] *On > > Behalf Of *Artem Belevich via cfe-commits > > *Sent:* Wednesday, June 27, 2018 14:30 > > *To:* Alexander Kornienko > > *Cc:* cfe-commits > > *Subject:* Re: r335740 - [analyzer] Allow registering custom > > statically-linked analyzer checkers > > > > FYI, > > > > This commit breaks clang tests. It appears that StaticAnalysisTests > > misses dependency on clangFrontend. > > > > --Artem > > > > [60/134] Linking CXX executable > > tools/clang/unittests/StaticAnalyzer/StaticAnalysisTests > > > > FAILED: tools/clang/unittests/StaticAnalyzer/StaticAnalysisTests > > > > : && /usr/local/google/home/tra/local/clang/bin/clang++ -fPIC > > -fvisibility-inlines-hidden -Werror=date-time > > -Werror=unguarded-availability-new -std=c++11 -Wall -Wextra > > -Wno-unused-parameter -Wwrite-strings -Wcast-qual > > -Wmissing-field-initializers -pedantic -Wno-long-long > > -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor > > -Wstring-conversion -fdiagnostics-color -fno-common -Woverloaded-virtual > > -Wno-nested-anon-types -g -fuse-ld=lld -Xlinker --gdb-index > > -fuse-ld=lld -Wl,--color-diagnostics -Wl,-allow-shlib-undefined > > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/AnalyzerOptionsTest.cpp.o > > > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o > > > -o tools/clang/unittests/StaticAnalyzer/StaticAnalysisTests > > lib/libLLVMSupport.so.7svn -lpthread lib/libgtest_main.so.7svn > > lib/libgtest.so.7svn -lpthread lib/libclangBasic.so.7svn > > lib/libclangAnalysis.so.7svn lib/libclangStaticAnalyzerCore.so.7svn > > lib/libclangStaticAnalyzerFrontend.so.7svn lib/libclangTooling.so.7svn > > -Wl,-rpath,/usr/local/google/home/tra/work/llvm/build/release+assert/lib > > && : > > > > /usr/local/google/home/tra/local/clang/bin/ld.lld: error: undefined > > symbol: clang::FrontendAction::FrontendAction() > > > >>>> referenced by FrontendAction.h:235 > (/usr/local/google/home/tra/work/llvm/repo/clang/include/clang/Frontend/FrontendAction.h:235) > > > >>>> > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o:(clang::ASTFrontendAction::ASTFrontendAction()) > > > > /usr/local/google/home/tra/local/clang/bin/ld.lld: error: undefined > > symbol: vtable for clang::ASTFrontendAction > > > >>>> referenced by FrontendAction.h:235 > (/usr/local/google/home/tra/work/llvm/repo/clang/include/clang/Frontend/FrontendAction.h:235) > > > >>>> > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o:(clang::ASTFrontendAction::ASTFrontendAction()) > > > > /usr/local/google/home/tra/local/clang/bin/ld.lld: error: undefined > > symbol: clang::FrontendAction::~FrontendAction() > > > >>>> referenced by FrontendAction.h:225 > (/usr/local/google/home/tra/work/llvm/repo/clang/include/clang/Frontend/FrontendAction.h:225) > > > >>>> > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o:(clang::ASTFrontendAction::~ASTFrontendAction()) > > > > /usr/local/google/home/tra/local/clang/bin/ld.lld: error: undefined > > symbol: clang::PCHContainerOperations::PCHContainerOperations() > > > >>>> referenced by new_allocator.h:136 > (/usr/lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/ext/new_allocator.h:136) > > > >>>> > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o:(void > __gnu_cxx::new_allocator<clang::PCHContainerOperations>::construct<clang::PCHContainerOperations>(clang::PCHContainerOperations*)) > > > > /usr/local/google/home/tra/local/clang/bin/ld.lld: error: undefined > > symbol: clang::ASTFrontendAction::ExecuteAction() > > > >>>> referenced by RegisterCustomCheckersTest.cpp > > > >>>> > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o:(vtable > for clang::ento::(anonymous namespace)::TestAction) > > > > /usr/local/google/home/tra/local/clang/bin/ld.lld: error: undefined > > symbol: clang::FrontendAction::shouldEraseOutputFiles() > > > >>>> referenced by RegisterCustomCheckersTest.cpp > > > >>>> > > tools/clang/unittests/StaticAnalyzer/CMakeFiles/StaticAnalysisTests.dir/RegisterCustomCheckersTest.cpp.o:(vtable > for clang::ento::(anonymous namespace)::TestAction) > > > > clang: error: linker command failed with exit code 1 (use -v to see > > invocation) > > > > On Wed, Jun 27, 2018 at 8:00 AM Alexander Kornienko via cfe-commits > > <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>> wrote: > > > > Author: alexfh > > Date: Wed Jun 27 07:56:12 2018 > > New Revision: 335740 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=335740&view=rev > > Log: > > [analyzer] Allow registering custom statically-linked analyzer > checkers > > > > Summary: > > Add an extension point to allow registration of statically-linked > > Clang Static > > Analyzer checkers that are not a part of the Clang tree. This > > extension point > > employs the mechanism used when checkers are registered from > > dynamically loaded > > plugins. > > > > Reviewers: george.karpenkov, NoQ, xazax.hun, dcoughlin > > > > Reviewed By: george.karpenkov > > > > Subscribers: mgorny, mikhail.ramalho, rnkovacs, xazax.hun, szepet, > > a.sidorin, cfe-commits > > > > Differential Revision: https://reviews.llvm.org/D45718 > > > > Added: > > > cfe/trunk/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp > > Modified: > > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h > > > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h > > cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp > > cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp > > cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp > > cfe/trunk/unittests/StaticAnalyzer/CMakeLists.txt > > > > Modified: > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h?rev=335740&r1=335739&r2=335740&view=diff > > > > ============================================================================== > > --- > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h > > (original) > > +++ > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h > > Wed Jun 27 07:56:12 2018 > > @@ -17,6 +17,7 @@ > > > > #include "clang/AST/ASTConsumer.h" > > #include "clang/Basic/LLVM.h" > > +#include <functional> > > #include <memory> > > > > namespace clang { > > @@ -29,10 +30,24 @@ class CompilerInstance; > > namespace ento { > > class PathDiagnosticConsumer; > > class CheckerManager; > > +class CheckerRegistry; > > > > class AnalysisASTConsumer : public ASTConsumer { > > public: > > virtual void AddDiagnosticConsumer(PathDiagnosticConsumer > > *Consumer) = 0; > > + > > + /// This method allows registering statically linked custom > > checkers that are > > + /// not a part of the Clang tree. It employs the same mechanism > > that is used > > + /// by plugins. > > + /// > > + /// Example: > > + /// > > + /// Consumer->AddCheckerRegistrationFn([] (CheckerRegistry& > > Registry) { > > + /// > > Registry.addChecker<MyCustomChecker>("example.MyCustomChecker", > > + /// "Description"); > > + /// }); > > + virtual void > > + AddCheckerRegistrationFn(std::function<void(CheckerRegistry &)> > > Fn) = 0; > > }; > > > > /// CreateAnalysisConsumer - Creates an ASTConsumer to run various > > code > > > > Modified: > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h?rev=335740&r1=335739&r2=335740&view=diff > > > > ============================================================================== > > --- > > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h > (original) > > +++ > > > cfe/trunk/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h Wed > > Jun 27 07:56:12 2018 > > @@ -11,6 +11,7 @@ > > #define LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H > > > > #include "clang/Basic/LLVM.h" > > +#include <functional> > > #include <memory> > > #include <string> > > > > @@ -21,10 +22,13 @@ namespace clang { > > > > namespace ento { > > class CheckerManager; > > + class CheckerRegistry; > > > > - std::unique_ptr<CheckerManager> > > - createCheckerManager(AnalyzerOptions &opts, const LangOptions > > &langOpts, > > - ArrayRef<std::string> plugins, > > DiagnosticsEngine &diags); > > + std::unique_ptr<CheckerManager> createCheckerManager( > > + AnalyzerOptions &opts, const LangOptions &langOpts, > > + ArrayRef<std::string> plugins, > > + ArrayRef<std::function<void(CheckerRegistry &)>> > > checkerRegistrationFns, > > + DiagnosticsEngine &diags); > > > > } // end ento namespace > > > > > > Modified: cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp?rev=335740&r1=335739&r2=335740&view=diff > > > > ============================================================================== > > --- cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp > > (original) > > +++ cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp Wed > > Jun 27 07:56:12 2018 > > @@ -164,6 +164,8 @@ class AnalysisConsumer : public Analysis > > /// Bug Reporter to use while recursively visiting Decls. > > BugReporter *RecVisitorBR; > > > > + std::vector<std::function<void(CheckerRegistry &)>> > > CheckerRegistrationFns; > > + > > public: > > ASTContext *Ctx; > > const Preprocessor &PP; > > @@ -293,8 +295,9 @@ public: > > > > void Initialize(ASTContext &Context) override { > > Ctx = &Context; > > - checkerMgr = createCheckerManager(*Opts, PP.getLangOpts(), > Plugins, > > - PP.getDiagnostics()); > > + checkerMgr = > > + createCheckerManager(*Opts, PP.getLangOpts(), Plugins, > > + CheckerRegistrationFns, > > PP.getDiagnostics()); > > > > Mgr = llvm::make_unique<AnalysisManager>( > > *Ctx, PP.getDiagnostics(), PP.getLangOpts(), PathConsumers, > > @@ -385,6 +388,10 @@ public: > > PathConsumers.push_back(Consumer); > > } > > > > + void > > AddCheckerRegistrationFn(std::function<void(CheckerRegistry&)> Fn) > > override { > > + CheckerRegistrationFns.push_back(std::move(Fn)); > > + } > > + > > private: > > void storeTopLevelDecls(DeclGroupRef DG); > > std::string getFunctionName(const Decl *D); > > > > Modified: > cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp?rev=335740&r1=335739&r2=335740&view=diff > > > > ============================================================================== > > --- cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp > > (original) > > +++ cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp > > Wed Jun 27 07:56:12 2018 > > @@ -111,16 +111,21 @@ getCheckerOptList(const AnalyzerOptions > > return checkerOpts; > > } > > > > -std::unique_ptr<CheckerManager> > > -ento::createCheckerManager(AnalyzerOptions &opts, const LangOptions > > &langOpts, > > - ArrayRef<std::string> plugins, > > - DiagnosticsEngine &diags) { > > +std::unique_ptr<CheckerManager> ento::createCheckerManager( > > + AnalyzerOptions &opts, const LangOptions &langOpts, > > + ArrayRef<std::string> plugins, > > + ArrayRef<std::function<void(CheckerRegistry &)>> > > checkerRegistrationFns, > > + DiagnosticsEngine &diags) { > > std::unique_ptr<CheckerManager> checkerMgr( > > new CheckerManager(langOpts, opts)); > > > > SmallVector<CheckerOptInfo, 8> checkerOpts = > > getCheckerOptList(opts); > > > > ClangCheckerRegistry allCheckers(plugins, &diags); > > + > > + for (const auto &Fn : checkerRegistrationFns) > > + Fn(allCheckers); > > + > > allCheckers.initializeManager(*checkerMgr, checkerOpts); > > allCheckers.validateCheckerOptions(opts, diags); > > checkerMgr->finishedCheckerRegistration(); > > > > Modified: cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp?rev=335740&r1=335739&r2=335740&view=diff > > > > ============================================================================== > > --- cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp > > (original) > > +++ cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp Wed > > Jun 27 07:56:12 2018 > > @@ -1,4 +1,4 @@ > > -//===- unittest/Analysis/AnalyzerOptionsTest.cpp - SA Options test > > --------===// > > +//===- unittest/StaticAnalyzer/AnalyzerOptionsTest.cpp - SA Options > > test --===// > > // > > // The LLVM Compiler Infrastructure > > // > > > > Modified: cfe/trunk/unittests/StaticAnalyzer/CMakeLists.txt > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/StaticAnalyzer/CMakeLists.txt?rev=335740&r1=335739&r2=335740&view=diff > > > > ============================================================================== > > --- cfe/trunk/unittests/StaticAnalyzer/CMakeLists.txt (original) > > +++ cfe/trunk/unittests/StaticAnalyzer/CMakeLists.txt Wed Jun 27 > > 07:56:12 2018 > > @@ -4,11 +4,14 @@ set(LLVM_LINK_COMPONENTS > > > > add_clang_unittest(StaticAnalysisTests > > AnalyzerOptionsTest.cpp > > + RegisterCustomCheckersTest.cpp > > ) > > > > target_link_libraries(StaticAnalysisTests > > PRIVATE > > clangBasic > > clangAnalysis > > - clangStaticAnalyzerCore > > + clangStaticAnalyzerCore > > + clangStaticAnalyzerFrontend > > + clangTooling > > ) > > > > Added: > cfe/trunk/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp?rev=335740&view=auto > > > > ============================================================================== > > --- > > cfe/trunk/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp > > (added) > > +++ > > cfe/trunk/unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp > > Wed Jun 27 07:56:12 2018 > > @@ -0,0 +1,80 @@ > > +//===- unittests/StaticAnalyzer/RegisterCustomCheckersTest.cpp > > ------------===// > > +// > > +// The LLVM Compiler Infrastructure > > +// > > +// This file is distributed under the University of Illinois Open > > Source > > +// License. See LICENSE.TXT for details. > > +// > > > > +//===----------------------------------------------------------------------===// > > + > > +#include "clang/Frontend/CompilerInstance.h" > > +#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" > > +#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" > > +#include "clang/StaticAnalyzer/Core/Checker.h" > > +#include "clang/StaticAnalyzer/Core/CheckerRegistry.h" > > +#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" > > +#include "clang/StaticAnalyzer/Frontend/AnalysisConsumer.h" > > +#include "clang/Tooling/Tooling.h" > > +#include "gtest/gtest.h" > > + > > +namespace clang { > > +namespace ento { > > +namespace { > > + > > +class CustomChecker : public Checker<check::ASTCodeBody> { > > +public: > > + void checkASTCodeBody(const Decl *D, AnalysisManager &Mgr, > > + BugReporter &BR) const { > > + BR.EmitBasicReport(D, this, "Custom diagnostic", > > categories::LogicError, > > + "Custom diagnostic description", > > + PathDiagnosticLocation(D, > > Mgr.getSourceManager()), {}); > > + } > > +}; > > + > > +class TestAction : public ASTFrontendAction { > > + class DiagConsumer : public PathDiagnosticConsumer { > > + llvm::raw_ostream &Output; > > + > > + public: > > + DiagConsumer(llvm::raw_ostream &Output) : Output(Output) {} > > + void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> > > &Diags, > > + FilesMade *filesMade) override { > > + for (const auto *PD : Diags) > > + Output << PD->getCheckName() << ":" << > > PD->getShortDescription(); > > + } > > + > > + StringRef getName() const override { return "Test"; } > > + }; > > + > > + llvm::raw_ostream &DiagsOutput; > > + > > +public: > > + TestAction(llvm::raw_ostream &DiagsOutput) : > > DiagsOutput(DiagsOutput) {} > > + > > + std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance > > &Compiler, > > + StringRef File) > > override { > > + std::unique_ptr<AnalysisASTConsumer> AnalysisConsumer = > > + CreateAnalysisConsumer(Compiler); > > + AnalysisConsumer->AddDiagnosticConsumer(new > > DiagConsumer(DiagsOutput)); > > + Compiler.getAnalyzerOpts()->CheckersControlList = { > > + {"custom.CustomChecker", true}}; > > + AnalysisConsumer->AddCheckerRegistrationFn([](CheckerRegistry > > &Registry) { > > + Registry.addChecker<CustomChecker>("custom.CustomChecker", > > "Description"); > > + }); > > + return AnalysisConsumer; > > + } > > +}; > > + > > + > > +TEST(RegisterCustomCheckers, RegisterChecker) { > > + std::string Diags; > > + { > > + llvm::raw_string_ostream OS(Diags); > > + EXPECT_TRUE(tooling::runToolOnCode(new TestAction(OS), "void > > f() {;}")); > > + } > > + EXPECT_EQ(Diags, "custom.CustomChecker:Custom diagnostic > > description"); > > +} > > + > > +} > > +} > > +} > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > > > > -- > > > > --Artem Belevich > > > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits