diff options
Diffstat (limited to 'clang/lib/Analysis')
-rw-r--r-- | clang/lib/Analysis/GRExprEngineInternalChecks.cpp | 3 | ||||
-rw-r--r-- | clang/lib/Analysis/GRExprEngineInternalChecks.h | 1 | ||||
-rw-r--r-- | clang/lib/Analysis/UndefinedAssignmentChecker.cpp | 20 |
3 files changed, 21 insertions, 3 deletions
diff --git a/clang/lib/Analysis/GRExprEngineInternalChecks.cpp b/clang/lib/Analysis/GRExprEngineInternalChecks.cpp index ec1da94efdf..5c428f53709 100644 --- a/clang/lib/Analysis/GRExprEngineInternalChecks.cpp +++ b/clang/lib/Analysis/GRExprEngineInternalChecks.cpp @@ -317,8 +317,6 @@ void GRExprEngine::RegisterInternalChecks() { // their associated BugType will get registered with the BugReporter // automatically. Note that the check itself is owned by the GRExprEngine // object. - registerCheck(new UndefinedAssignmentChecker()); - RegisterAttrNonNullChecker(*this); RegisterUndefinedArgChecker(*this); RegisterDereferenceChecker(*this); @@ -327,4 +325,5 @@ void GRExprEngine::RegisterInternalChecks() { RegisterReturnStackAddressChecker(*this); RegisterReturnUndefChecker(*this); RegisterUndefinedArraySubscriptChecker(*this); + RegisterUndefinedAssignmentChecker(*this); } diff --git a/clang/lib/Analysis/GRExprEngineInternalChecks.h b/clang/lib/Analysis/GRExprEngineInternalChecks.h index 5db00132ef2..49c790a4eee 100644 --- a/clang/lib/Analysis/GRExprEngineInternalChecks.h +++ b/clang/lib/Analysis/GRExprEngineInternalChecks.h @@ -33,6 +33,7 @@ void RegisterCastToStructChecker(GRExprEngine &Eng); void RegisterUndefinedArgChecker(GRExprEngine &Eng); void RegisterArrayBoundChecker(GRExprEngine &Eng); void RegisterUndefinedArraySubscriptChecker(GRExprEngine &Eng); +void RegisterUndefinedAssignmentChecker(GRExprEngine &Eng); } // end clang namespace #endif diff --git a/clang/lib/Analysis/UndefinedAssignmentChecker.cpp b/clang/lib/Analysis/UndefinedAssignmentChecker.cpp index b8062f35956..0e911ffab08 100644 --- a/clang/lib/Analysis/UndefinedAssignmentChecker.cpp +++ b/clang/lib/Analysis/UndefinedAssignmentChecker.cpp @@ -12,11 +12,29 @@ // //===----------------------------------------------------------------------===// -#include "clang/Analysis/PathSensitive/Checkers/UndefinedAssignmentChecker.h" +#include "GRExprEngineInternalChecks.h" +#include "clang/Analysis/PathSensitive/CheckerVisitor.h" #include "clang/Analysis/PathSensitive/BugReporter.h" using namespace clang; +namespace { +class VISIBILITY_HIDDEN UndefinedAssignmentChecker + : public CheckerVisitor<UndefinedAssignmentChecker> { + BugType *BT; +public: + UndefinedAssignmentChecker() : BT(0) {} + static void *getTag(); + virtual void PreVisitBind(CheckerContext &C, const Stmt *AssignE, + const Stmt *StoreE, SVal location, + SVal val); +}; +} + +void clang::RegisterUndefinedAssignmentChecker(GRExprEngine &Eng){ + Eng.registerCheck(new UndefinedAssignmentChecker()); +} + void *UndefinedAssignmentChecker::getTag() { static int x = 0; return &x; |