From 36df58ab9e3eb6823966ee16c5516eea1d88e541 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 6 Nov 2009 20:47:51 +0000 Subject: [PATCH] Make the implementation of DivZeroChecker private. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86288 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../PathSensitive/Checkers/DivZeroChecker.h | 28 ------------------- lib/Analysis/DivZeroChecker.cpp | 17 ++++++++++- lib/Analysis/GRExprEngineInternalChecks.cpp | 14 ++++++---- lib/Analysis/GRExprEngineInternalChecks.h | 5 ++-- 4 files changed, 27 insertions(+), 37 deletions(-) delete mode 100644 include/clang/Analysis/PathSensitive/Checkers/DivZeroChecker.h diff --git a/include/clang/Analysis/PathSensitive/Checkers/DivZeroChecker.h b/include/clang/Analysis/PathSensitive/Checkers/DivZeroChecker.h deleted file mode 100644 index 317e43a0e6..0000000000 --- a/include/clang/Analysis/PathSensitive/Checkers/DivZeroChecker.h +++ /dev/null @@ -1,28 +0,0 @@ -//== DivZeroChecker.h - Division by zero checker ----------------*- C++ -*--==// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This defines DivZeroChecker, a builtin check in GRExprEngine that performs -// checks for division by zeros. -// -//===----------------------------------------------------------------------===// - -#include "clang/Analysis/PathSensitive/CheckerVisitor.h" - -namespace clang { - -class DivZeroChecker : public CheckerVisitor { - BuiltinBug *BT; -public: - DivZeroChecker() : BT(0) {} - - static void *getTag(); - void PreVisitBinaryOperator(CheckerContext &C, const BinaryOperator *B); -}; - -} diff --git a/lib/Analysis/DivZeroChecker.cpp b/lib/Analysis/DivZeroChecker.cpp index c90c0ab493..5f949fdc39 100644 --- a/lib/Analysis/DivZeroChecker.cpp +++ b/lib/Analysis/DivZeroChecker.cpp @@ -12,10 +12,25 @@ // //===----------------------------------------------------------------------===// -#include "clang/Analysis/PathSensitive/Checkers/DivZeroChecker.h" +#include "clang/Analysis/PathSensitive/CheckerVisitor.h" +#include "GRExprEngineInternalChecks.h" using namespace clang; +namespace { +class VISIBILITY_HIDDEN DivZeroChecker : public CheckerVisitor { + BuiltinBug *BT; +public: + DivZeroChecker() : BT(0) {} + static void *getTag(); + void PreVisitBinaryOperator(CheckerContext &C, const BinaryOperator *B); +}; +} // end anonymous namespace + +void clang::RegisterDivZeroChecker(GRExprEngine &Eng) { + Eng.registerCheck(new DivZeroChecker()); +} + void *DivZeroChecker::getTag() { static int x; return &x; diff --git a/lib/Analysis/GRExprEngineInternalChecks.cpp b/lib/Analysis/GRExprEngineInternalChecks.cpp index b18e58dea2..3daf3c8ef5 100644 --- a/lib/Analysis/GRExprEngineInternalChecks.cpp +++ b/lib/Analysis/GRExprEngineInternalChecks.cpp @@ -17,7 +17,6 @@ #include "clang/Analysis/PathSensitive/GRExprEngine.h" #include "clang/Analysis/PathSensitive/CheckerVisitor.h" #include "clang/Analysis/PathSensitive/Checkers/DereferenceChecker.h" -#include "clang/Analysis/PathSensitive/Checkers/DivZeroChecker.h" #include "clang/Analysis/PathSensitive/Checkers/BadCallChecker.h" #include "clang/Analysis/PathSensitive/Checkers/UndefinedArgChecker.h" #include "clang/Analysis/PathSensitive/Checkers/UndefinedAssignmentChecker.h" @@ -398,19 +397,22 @@ void GRExprEngine::RegisterInternalChecks() { BR.Register(new NilReceiverStructRet(this)); BR.Register(new NilReceiverLargerThanVoidPtrRet(this)); + RegisterDivZeroChecker(*this); + RegisterReturnStackAddressChecker(*this); + RegisterReturnUndefChecker(*this); + + // Note that this must be registered after ReturnStackAddressChecker. + RegisterReturnPointerRangeChecker(*this); + // The following checks do not need to have their associated BugTypes // explicitly registered with the BugReporter. If they issue any BugReports, // their associated BugType will get registered with the BugReporter // automatically. Note that the check itself is owned by the GRExprEngine - // object. - RegisterReturnStackAddressChecker(*this); - RegisterReturnUndefChecker(*this); - RegisterReturnPointerRangeChecker(*this); + // object. registerCheck(new AttrNonNullChecker()); registerCheck(new UndefinedArgChecker()); registerCheck(new UndefinedAssignmentChecker()); registerCheck(new BadCallChecker()); - registerCheck(new DivZeroChecker()); registerCheck(new UndefDerefChecker()); registerCheck(new NullDerefChecker()); registerCheck(new UndefSizedVLAChecker()); diff --git a/lib/Analysis/GRExprEngineInternalChecks.h b/lib/Analysis/GRExprEngineInternalChecks.h index b4a00d2e13..ae239ca23c 100644 --- a/lib/Analysis/GRExprEngineInternalChecks.h +++ b/lib/Analysis/GRExprEngineInternalChecks.h @@ -19,9 +19,10 @@ namespace clang { class GRExprEngine; -void RegisterReturnStackAddressChecker(GRExprEngine &Eng); -void RegisterReturnUndefChecker(GRExprEngine &Eng); +void RegisterDivZeroChecker(GRExprEngine &Eng); void RegisterReturnPointerRangeChecker(GRExprEngine &Eng); +void RegisterReturnStackAddressChecker(GRExprEngine &Eng); +void RegisterReturnUndefChecker(GRExprEngine &Eng); } // end clang namespace #endif -- 2.40.0