diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2008-11-23 05:52:28 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2008-11-23 05:52:28 +0000 |
commit | 1c0c23325312df5d40fe788ffcb48484f190e9a3 (patch) | |
tree | dbf3076e8d85fc1b492516d11e13a669a2e9e1c5 /lib/Analysis/GRExprEngine.cpp | |
parent | ea06544bea29ba9def49ea061def1df9e100af25 (diff) |
Add out-of-bound memory access warning report code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59903 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/GRExprEngine.cpp')
-rw-r--r-- | lib/Analysis/GRExprEngine.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index 6de910fc17..084796cd99 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -1088,7 +1088,20 @@ const GRState* GRExprEngine::EvalLocation(Stmt* Ex, NodeTy* Pred, if (isFeasibleOutBound) { // Report warning. - StOutBound = 0; + // Make sink node manually. + ProgramPoint::Kind K = isLoad ? ProgramPoint::PostLoadKind + : ProgramPoint::PostStoreKind; + + NodeTy* OOBNode = Builder->generateNode(Ex, StOutBound, Pred, K); + + if (OOBNode) { + OOBNode->markAsSink(); + + if (isFeasibleInBound) + ImplicitOOBMemAccesses.insert(OOBNode); + else + ExplicitOOBMemAccesses.insert(OOBNode); + } } return isFeasibleInBound ? StInBound : NULL; @@ -2529,8 +2542,8 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B, SVal LHSVal; - if (Result.isUnknown() && (Loc::IsLocType(CTy) || - (CTy->isScalarType() && CTy->isIntegerType()))) { + if (Result.isUnknown() && (Loc::IsLocType(CTy) + || (CTy->isScalarType() && CTy->isIntegerType()))) { unsigned Count = Builder->getCurrentBlockCount(); @@ -2542,7 +2555,7 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B, ? cast<SVal>(loc::SymbolVal(Sym)) : cast<SVal>(nonloc::SymbolVal(Sym)); - // However, we need to convert the symbol to the computation type. + // However, we need to convert the symbol to the computation type. Result = (LTy == CTy) ? LHSVal : EvalCast(LHSVal,CTy); } else { |