diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-12-24 06:19:58 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-12-24 06:19:58 +0000 |
commit | 9d6af5328e3a61641a125b17125952fa1a6bf11d (patch) | |
tree | 2bc6d19da9db88702156312ae82a95e0f4cb14e1 /clang/lib/StaticAnalyzer/EntoSA/Checkers/DivZeroChecker.cpp | |
parent | 50986b5d39cd82d136af01affe6e6f6655cda33f (diff) | |
download | bcm5719-llvm-9d6af5328e3a61641a125b17125952fa1a6bf11d.tar.gz bcm5719-llvm-9d6af5328e3a61641a125b17125952fa1a6bf11d.zip |
Remove the EntoSA directories.
llvm-svn: 122543
Diffstat (limited to 'clang/lib/StaticAnalyzer/EntoSA/Checkers/DivZeroChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/EntoSA/Checkers/DivZeroChecker.cpp | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/clang/lib/StaticAnalyzer/EntoSA/Checkers/DivZeroChecker.cpp b/clang/lib/StaticAnalyzer/EntoSA/Checkers/DivZeroChecker.cpp deleted file mode 100644 index 8332af8f5d0..00000000000 --- a/clang/lib/StaticAnalyzer/EntoSA/Checkers/DivZeroChecker.cpp +++ /dev/null @@ -1,86 +0,0 @@ -//== DivZeroChecker.cpp - 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 ExprEngine that performs -// checks for division by zeros. -// -//===----------------------------------------------------------------------===// - -#include "ExprEngineInternalChecks.h" -#include "clang/StaticAnalyzer/BugReporter/BugType.h" -#include "clang/StaticAnalyzer/PathSensitive/CheckerVisitor.h" - -using namespace clang; -using namespace ento; - -namespace { -class DivZeroChecker : public CheckerVisitor<DivZeroChecker> { - BuiltinBug *BT; -public: - DivZeroChecker() : BT(0) {} - static void *getTag(); - void PreVisitBinaryOperator(CheckerContext &C, const BinaryOperator *B); -}; -} // end anonymous namespace - -void ento::RegisterDivZeroChecker(ExprEngine &Eng) { - Eng.registerCheck(new DivZeroChecker()); -} - -void *DivZeroChecker::getTag() { - static int x; - return &x; -} - -void DivZeroChecker::PreVisitBinaryOperator(CheckerContext &C, - const BinaryOperator *B) { - BinaryOperator::Opcode Op = B->getOpcode(); - if (Op != BO_Div && - Op != BO_Rem && - Op != BO_DivAssign && - Op != BO_RemAssign) - return; - - if (!B->getRHS()->getType()->isIntegerType() || - !B->getRHS()->getType()->isScalarType()) - return; - - SVal Denom = C.getState()->getSVal(B->getRHS()); - const DefinedSVal *DV = dyn_cast<DefinedSVal>(&Denom); - - // Divide-by-undefined handled in the generic checking for uses of - // undefined values. - if (!DV) - return; - - // Check for divide by zero. - ConstraintManager &CM = C.getConstraintManager(); - const GRState *stateNotZero, *stateZero; - llvm::tie(stateNotZero, stateZero) = CM.assumeDual(C.getState(), *DV); - - if (stateZero && !stateNotZero) { - if (ExplodedNode *N = C.generateSink(stateZero)) { - if (!BT) - BT = new BuiltinBug("Division by zero"); - - EnhancedBugReport *R = - new EnhancedBugReport(*BT, BT->getDescription(), N); - - R->addVisitorCreator(bugreporter::registerTrackNullOrUndefValue, - bugreporter::GetDenomExpr(N)); - - C.EmitReport(R); - } - return; - } - - // If we get here, then the denom should not be zero. We abandon the implicit - // zero denom case for now. - C.addTransition(stateNotZero); -} |