diff options
author | Anna Zaks <ganna@apple.com> | 2012-05-02 00:05:23 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-05-02 00:05:23 +0000 |
commit | 06be9117bf2a05814e49349ffbab6ca8b5d28f4f (patch) | |
tree | eecc8f93a7e36acfeca40a8f628973f212c9f9ae /clang/lib/StaticAnalyzer/Core/SValBuilder.cpp | |
parent | 263b7e016e44d80293a653987de6c122678adf9f (diff) | |
download | bcm5719-llvm-06be9117bf2a05814e49349ffbab6ca8b5d28f4f.tar.gz bcm5719-llvm-06be9117bf2a05814e49349ffbab6ca8b5d28f4f.zip |
[analyzer] Fix an assertion failure triggered by the analyzer buildbot.
llvm-svn: 155964
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/SValBuilder.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/SValBuilder.cpp | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp index 4ce9d09280f..4c021a4a26c 100644 --- a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp @@ -196,25 +196,24 @@ DefinedSVal SValBuilder::getBlockPointer(const BlockDecl *block, //===----------------------------------------------------------------------===// SVal SValBuilder::makeSymExprValNN(ProgramStateRef State, - BinaryOperator::Opcode Op, - NonLoc LHS, NonLoc RHS, - QualType ResultTy) { - const SymExpr *symLHS; - const SymExpr *symRHS; - - if (const nonloc::ConcreteInt *rInt = dyn_cast<nonloc::ConcreteInt>(&RHS)) { - symLHS = LHS.getAsSymExpr(); - return makeNonLoc(symLHS, Op, rInt->getValue(), ResultTy); - } + BinaryOperator::Opcode Op, + NonLoc LHS, NonLoc RHS, + QualType ResultTy) { + const SymExpr *symLHS = LHS.getAsSymExpr(); + const SymExpr *symRHS = RHS.getAsSymExpr(); - if (const nonloc::ConcreteInt *lInt = dyn_cast<nonloc::ConcreteInt>(&LHS)) { - symRHS = RHS.getAsSymExpr(); - return makeNonLoc(lInt->getValue(), Op, symRHS, ResultTy); - } + if (symLHS && symRHS) + return makeNonLoc(symLHS, Op, symRHS, ResultTy); + + if (symLHS) + if (const nonloc::ConcreteInt *rInt = dyn_cast<nonloc::ConcreteInt>(&RHS)) + return makeNonLoc(symLHS, Op, rInt->getValue(), ResultTy); - symLHS = LHS.getAsSymExpr(); - symRHS = RHS.getAsSymExpr(); - return makeNonLoc(symLHS, Op, symRHS, ResultTy); + if (symRHS) + if (const nonloc::ConcreteInt *lInt = dyn_cast<nonloc::ConcreteInt>(&LHS)) + return makeNonLoc(lInt->getValue(), Op, symRHS, ResultTy); + + return UnknownVal(); } |