diff --git a/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h b/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h index ad25d18f280700..24c5b66fd58220 100644 --- a/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h +++ b/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -164,8 +164,6 @@ class CheckerManager { bool hasPathSensitiveCheckers() const; - void finishedCheckerRegistration(); - const LangOptions &getLangOpts() const { return LangOpts; } const AnalyzerOptions &getAnalyzerOptions() const { return AOptions; } const Preprocessor &getPreprocessor() const { diff --git a/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp b/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp index 6fc16223ea8287..524a4c43abf243 100644 --- a/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp +++ b/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp @@ -48,16 +48,6 @@ bool CheckerManager::hasPathSensitiveCheckers() const { EvalCallCheckers, EndOfTranslationUnitCheckers); } -void CheckerManager::finishedCheckerRegistration() { -#ifndef NDEBUG - // Make sure that for every event that has listeners, there is at least - // one dispatcher registered for it. - for (const auto &Event : Events) - assert(Event.second.HasDispatcher && - "No dispatcher registered for an event"); -#endif -} - void CheckerManager::reportInvalidCheckerOptionValue( const CheckerBase *C, StringRef OptionName, StringRef ExpectedValueDesc) const { diff --git a/clang/lib/StaticAnalyzer/Frontend/CreateCheckerManager.cpp b/clang/lib/StaticAnalyzer/Frontend/CreateCheckerManager.cpp index 21a60785eb5253..f60221ad7587e4 100644 --- a/clang/lib/StaticAnalyzer/Frontend/CreateCheckerManager.cpp +++ b/clang/lib/StaticAnalyzer/Frontend/CreateCheckerManager.cpp @@ -28,7 +28,6 @@ CheckerManager::CheckerManager( AOptions, checkerRegistrationFns); Registry.initializeRegistry(*this); Registry.initializeManager(*this); - finishedCheckerRegistration(); } CheckerManager::CheckerManager(AnalyzerOptions &AOptions, diff --git a/clang/test/Analysis/nullability-nocrash.c b/clang/test/Analysis/nullability-nocrash.c new file mode 100644 index 00000000000000..209b7708250676 --- /dev/null +++ b/clang/test/Analysis/nullability-nocrash.c @@ -0,0 +1,13 @@ +// RUN: %clang_analyze_cc1 -w -analyzer-checker=nullability \ +// RUN: -analyzer-output=text -verify %s +// +// expected-no-diagnostics +// +// Previously there was an assertion requiring that if an Event is handled by +// some enabled checker, then there must be at least one enabled checker which +// can emit that kind of Event. +// This assertion failed when NullabilityChecker (which is a subclass of +// check::Event) was enabled, but the checkers +// inheriting from EventDispatcher were all disabled. +// This test file validates that enabling the nullability checkers (without any +// other checkers) no longer causes a crash.