jranieri-grammatech created this revision. Herald added a subscriber: cfe-commits.
Event types are uniqued by using the addresses of a local static defined in a header files, but it isn't the same across shared library boundaries and plugins can't currently handle ImplicitNullDerefEvents. Repository: rC Clang https://reviews.llvm.org/D52906 Files: include/clang/StaticAnalyzer/Core/Checker.h include/clang/StaticAnalyzer/Core/CheckerManager.h lib/StaticAnalyzer/Core/Checker.cpp Index: lib/StaticAnalyzer/Core/Checker.cpp =================================================================== --- lib/StaticAnalyzer/Core/Checker.cpp +++ lib/StaticAnalyzer/Core/Checker.cpp @@ -17,6 +17,8 @@ using namespace clang; using namespace ento; +int ImplicitNullDerefEvent::Tag; + StringRef CheckerBase::getTagDescription() const { return getCheckName().getName(); } Index: include/clang/StaticAnalyzer/Core/CheckerManager.h =================================================================== --- include/clang/StaticAnalyzer/Core/CheckerManager.h +++ include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -532,19 +532,19 @@ template <typename EVENT> void _registerListenerForEvent(CheckEventFunc checkfn) { - EventInfo &info = Events[getTag<EVENT>()]; + EventInfo &info = Events[&EVENT::Tag]; info.Checkers.push_back(checkfn); } template <typename EVENT> void _registerDispatcherForEvent() { - EventInfo &info = Events[getTag<EVENT>()]; + EventInfo &info = Events[&EVENT::Tag]; info.HasDispatcher = true; } template <typename EVENT> void _dispatchEvent(const EVENT &event) const { - EventsTy::const_iterator I = Events.find(getTag<EVENT>()); + EventsTy::const_iterator I = Events.find(&EVENT::Tag); if (I == Events.end()) return; const EventInfo &info = I->second; Index: include/clang/StaticAnalyzer/Core/Checker.h =================================================================== --- include/clang/StaticAnalyzer/Core/Checker.h +++ include/clang/StaticAnalyzer/Core/Checker.h @@ -558,6 +558,8 @@ // dereference might happen later (for example pointer passed to a parameter // that is marked with nonnull attribute.) bool IsDirectDereference; + + static int Tag; }; /// A helper class which wraps a boolean value set to false by default.
Index: lib/StaticAnalyzer/Core/Checker.cpp =================================================================== --- lib/StaticAnalyzer/Core/Checker.cpp +++ lib/StaticAnalyzer/Core/Checker.cpp @@ -17,6 +17,8 @@ using namespace clang; using namespace ento; +int ImplicitNullDerefEvent::Tag; + StringRef CheckerBase::getTagDescription() const { return getCheckName().getName(); } Index: include/clang/StaticAnalyzer/Core/CheckerManager.h =================================================================== --- include/clang/StaticAnalyzer/Core/CheckerManager.h +++ include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -532,19 +532,19 @@ template <typename EVENT> void _registerListenerForEvent(CheckEventFunc checkfn) { - EventInfo &info = Events[getTag<EVENT>()]; + EventInfo &info = Events[&EVENT::Tag]; info.Checkers.push_back(checkfn); } template <typename EVENT> void _registerDispatcherForEvent() { - EventInfo &info = Events[getTag<EVENT>()]; + EventInfo &info = Events[&EVENT::Tag]; info.HasDispatcher = true; } template <typename EVENT> void _dispatchEvent(const EVENT &event) const { - EventsTy::const_iterator I = Events.find(getTag<EVENT>()); + EventsTy::const_iterator I = Events.find(&EVENT::Tag); if (I == Events.end()) return; const EventInfo &info = I->second; Index: include/clang/StaticAnalyzer/Core/Checker.h =================================================================== --- include/clang/StaticAnalyzer/Core/Checker.h +++ include/clang/StaticAnalyzer/Core/Checker.h @@ -558,6 +558,8 @@ // dereference might happen later (for example pointer passed to a parameter // that is marked with nonnull attribute.) bool IsDirectDereference; + + static int Tag; }; /// A helper class which wraps a boolean value set to false by default.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits