[cfe-commits] r155964 - in /cfe/trunk: lib/StaticAnalyzer/Core/SValBuilder.cpp test/Analysis/svalbuilder-logic.c

Anna Zaks ganna at apple.com
Tue May 1 17:05:24 PDT 2012


Author: zaks
Date: Tue May  1 19:05:23 2012
New Revision: 155964

URL: http://llvm.org/viewvc/llvm-project?rev=155964&view=rev
Log:
[analyzer] Fix an assertion failure triggered by the analyzer buildbot.

Added:
    cfe/trunk/test/Analysis/svalbuilder-logic.c
Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp?rev=155964&r1=155963&r2=155964&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp Tue May  1 19:05:23 2012
@@ -196,25 +196,24 @@
 //===----------------------------------------------------------------------===//
 
 SVal SValBuilder::makeSymExprValNN(ProgramStateRef State,
-                                 BinaryOperator::Opcode Op,
-                                 NonLoc LHS, NonLoc RHS,
-                                 QualType ResultTy) {
-  const SymExpr *symLHS;
-  const SymExpr *symRHS;
+                                   BinaryOperator::Opcode Op,
+                                   NonLoc LHS, NonLoc RHS,
+                                   QualType ResultTy) {
+  const SymExpr *symLHS = LHS.getAsSymExpr();
+  const SymExpr *symRHS = RHS.getAsSymExpr();
+
+  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);
+
+  if (symRHS)
+    if (const nonloc::ConcreteInt *lInt = dyn_cast<nonloc::ConcreteInt>(&LHS))
+      return makeNonLoc(lInt->getValue(), Op, symRHS, ResultTy);
 
-  if (const nonloc::ConcreteInt *rInt = dyn_cast<nonloc::ConcreteInt>(&RHS)) {
-    symLHS = LHS.getAsSymExpr();
-    return makeNonLoc(symLHS, Op, rInt->getValue(), ResultTy);
-  }
-
-  if (const nonloc::ConcreteInt *lInt = dyn_cast<nonloc::ConcreteInt>(&LHS)) {
-    symRHS = RHS.getAsSymExpr();
-    return makeNonLoc(lInt->getValue(), Op, symRHS, ResultTy);
-  }
-
-  symLHS = LHS.getAsSymExpr();
-  symRHS = RHS.getAsSymExpr();
-  return makeNonLoc(symLHS, Op, symRHS, ResultTy);
+  return UnknownVal();
 }
 
 

Added: cfe/trunk/test/Analysis/svalbuilder-logic.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/svalbuilder-logic.c?rev=155964&view=auto
==============================================================================
--- cfe/trunk/test/Analysis/svalbuilder-logic.c (added)
+++ cfe/trunk/test/Analysis/svalbuilder-logic.c Tue May  1 19:05:23 2012
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -verify %s
+
+// Testing core functionality of the SValBuilder.
+
+int SValBuilderLogicNoCrash(int *x) {
+  return 3 - (int)(x +3);
+}





More information about the cfe-commits mailing list