зеркало из https://github.com/microsoft/clang-1.git
Teach ObjCContainersChecker that the array passed to CFArrayGetValueAtIndex might not be a symbolic value.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154083 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
bb3d20f80c
Коммит
04a18c9f42
|
@ -40,7 +40,6 @@ class ObjCContainersChecker : public Checker< check::PreStmt<CallExpr>,
|
|||
inline SymbolRef getArraySym(const Expr *E, CheckerContext &C) const {
|
||||
SVal ArrayRef = C.getState()->getSVal(E, C.getLocationContext());
|
||||
SymbolRef ArraySym = ArrayRef.getAsSymbol();
|
||||
assert(ArraySym);
|
||||
return ArraySym;
|
||||
}
|
||||
|
||||
|
@ -120,8 +119,12 @@ void ObjCContainersChecker::checkPreStmt(const CallExpr *CE,
|
|||
// Retrieve the size.
|
||||
// Find out if we saw this array symbol before and have information about it.
|
||||
const Expr *ArrayExpr = CE->getArg(0);
|
||||
const DefinedSVal *Size =
|
||||
State->get<ArraySizeMap>(getArraySym(ArrayExpr, C));
|
||||
SymbolRef ArraySym = getArraySym(ArrayExpr, C);
|
||||
if (!ArraySym)
|
||||
return;
|
||||
|
||||
const DefinedSVal *Size = State->get<ArraySizeMap>(ArraySym);
|
||||
|
||||
if (!Size)
|
||||
return;
|
||||
|
||||
|
|
|
@ -198,3 +198,7 @@ void TestConst(CFArrayRef A, CFIndex sIndex, void* x[]) {
|
|||
const void *s1 = CFArrayGetValueAtIndex(B, 2);
|
||||
|
||||
}
|
||||
|
||||
void TestNullArray() {
|
||||
CFArrayGetValueAtIndex(0, 0);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче