Index: cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h +++ cfe/trunk/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: cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -532,19 +532,19 @@ template void _registerListenerForEvent(CheckEventFunc checkfn) { - EventInfo &info = Events[getTag()]; + EventInfo &info = Events[&EVENT::Tag]; info.Checkers.push_back(checkfn); } template void _registerDispatcherForEvent() { - EventInfo &info = Events[getTag()]; + EventInfo &info = Events[&EVENT::Tag]; info.HasDispatcher = true; } template void _dispatchEvent(const EVENT &event) const { - EventsTy::const_iterator I = Events.find(getTag()); + EventsTy::const_iterator I = Events.find(&EVENT::Tag); if (I == Events.end()) return; const EventInfo &info = I->second; Index: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h @@ -36,10 +36,7 @@ template <> struct ProgramStateTrait : public ProgramStatePartialTrait { - static void *GDMIndex() { - static int index = 0; - return &index; - } + static void *GDMIndex(); }; /// Get dynamic type information for a region. Index: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h @@ -832,7 +832,7 @@ template <> struct ProgramStateTrait : public ProgramStatePartialTrait { - static void *GDMIndex() { static int index = 0; return &index; } + static void *GDMIndex(); }; } // namespace ento Index: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h @@ -131,7 +131,7 @@ template <> struct ProgramStateTrait : public ProgramStatePartialTrait { - static void *GDMIndex() { static int Index; return &Index; } + static void *GDMIndex(); }; Index: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h @@ -34,10 +34,7 @@ template<> struct ProgramStateTrait : public ProgramStatePartialTrait { - static void *GDMIndex() { - static int index = 0; - return &index; - } + static void *GDMIndex(); }; /// The GDM component mapping derived symbols' parent symbols to their @@ -49,10 +46,7 @@ template<> struct ProgramStateTrait : public ProgramStatePartialTrait { - static void *GDMIndex() { - static int index; - return &index; - } + static void *GDMIndex(); }; class TaintManager { Index: cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt +++ cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt @@ -52,6 +52,7 @@ Store.cpp SubEngine.cpp SymbolManager.cpp + TaintManager.cpp WorkList.cpp Z3ConstraintManager.cpp Index: cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp +++ cfe/trunk/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: cfe/trunk/lib/StaticAnalyzer/Core/DynamicTypeMap.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/DynamicTypeMap.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/DynamicTypeMap.cpp @@ -77,5 +77,10 @@ } } +void *ProgramStateTrait::GDMIndex() { + static int index = 0; + return &index; +} + } // namespace ento } // namespace clang Index: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -3108,3 +3108,8 @@ llvm::errs() << "Warning: dumping graph requires assertions" << "\n"; return ""; } + +void *ProgramStateTrait::GDMIndex() { + static int index = 0; + return &index; +} Index: cfe/trunk/lib/StaticAnalyzer/Core/RangedConstraintManager.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/RangedConstraintManager.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/RangedConstraintManager.cpp @@ -200,6 +200,11 @@ } } +void *ProgramStateTrait::GDMIndex() { + static int Index; + return &Index; +} + } // end of namespace ento } // end of namespace clang Index: cfe/trunk/lib/StaticAnalyzer/Core/TaintManager.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/TaintManager.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/TaintManager.cpp @@ -0,0 +1,23 @@ +//== TaintManager.cpp ------------------------------------------ -*- C++ -*--=// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h" + +using namespace clang; +using namespace ento; + +void *ProgramStateTrait::GDMIndex() { + static int index = 0; + return &index; +} + +void *ProgramStateTrait::GDMIndex() { + static int index; + return &index; +}