r175025 - [analyzer] Use makeZeroVal in RegionStore's lazy evaluation of statics.

Jordan Rose jordan_rose at apple.com
Tue Feb 12 19:11:01 PST 2013


Author: jrose
Date: Tue Feb 12 21:11:01 2013
New Revision: 175025

URL: http://llvm.org/viewvc/llvm-project?rev=175025&view=rev
Log:
[analyzer] Use makeZeroVal in RegionStore's lazy evaluation of statics.

No functionality change.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp?rev=175025&r1=175024&r2=175025&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp Tue Feb 12 21:11:01 2013
@@ -1514,33 +1514,29 @@ SVal RegionStoreManager::getBindingForVa
     return svalBuilder.getRegionValueSymbolVal(R);
 
   if (isa<GlobalsSpaceRegion>(MS)) {
-    if (isa<NonStaticGlobalSpaceRegion>(MS)) {
-      // Is 'VD' declared constant?  If so, retrieve the constant value.
-      QualType CT = Ctx.getCanonicalType(T);
-      if (CT.isConstQualified()) {
-        const Expr *Init = VD->getInit();
-        // Do the null check first, as we want to call 'IgnoreParenCasts'.
-        if (Init)
-          if (const IntegerLiteral *IL =
-              dyn_cast<IntegerLiteral>(Init->IgnoreParenCasts())) {
-            const nonloc::ConcreteInt &V = svalBuilder.makeIntVal(IL);
-            return svalBuilder.evalCast(V, Init->getType(), IL->getType());
-          }
+    // Function-scoped static variables are default-initialized to 0; if they
+    // have an initializer, it would have been processed by now.
+    if (isa<StaticGlobalSpaceRegion>(MS))
+      return svalBuilder.makeZeroVal(T);
+
+    // Other globals 
+    // Is 'VD' declared constant?  If so, retrieve the constant value.
+    QualType CT = Ctx.getCanonicalType(T);
+    if (CT.isConstQualified()) {
+      if (const Expr *Init = VD->getInit()) {
+        if (const IntegerLiteral *IL =
+            dyn_cast<IntegerLiteral>(Init->IgnoreParenCasts())) {
+          const nonloc::ConcreteInt &V = svalBuilder.makeIntVal(IL);
+          return svalBuilder.evalCast(V, Init->getType(), IL->getType());
+        }
       }
-
-      if (const Optional<SVal> &V
-            = getBindingForDerivedDefaultValue(B, MS, R, CT))
-        return V.getValue();
-
-      return svalBuilder.getRegionValueSymbolVal(R);
     }
 
-    if (T->isIntegerType())
-      return svalBuilder.makeIntVal(0, T);
-    if (T->isPointerType())
-      return svalBuilder.makeNull();
+    if (const Optional<SVal> &V
+          = getBindingForDerivedDefaultValue(B, MS, R, CT))
+      return V.getValue();
 
-    return UnknownVal();
+    return svalBuilder.getRegionValueSymbolVal(R);
   }
 
   return UndefinedVal();





More information about the cfe-commits mailing list