]> granicus.if.org Git - clang/commitdiff
[analyzer] Minor cleanup of SValBuilder: Comments + code reuse.
authorAnna Zaks <ganna@apple.com>
Mon, 28 Nov 2011 20:43:37 +0000 (20:43 +0000)
committerAnna Zaks <ganna@apple.com>
Mon, 28 Nov 2011 20:43:37 +0000 (20:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145274 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
lib/StaticAnalyzer/Core/SValBuilder.cpp

index 9266588163ce5ee992592929b45d6fd9dd6fc2f8..b7b2345503e3d1c1e7fc92431e9cb1d01f241631 100644 (file)
@@ -140,12 +140,18 @@ public:
     return SymMgr.getConjuredSymbol(expr, visitCount, symbolTag);
   }
 
-  /// makeZeroVal - Construct an SVal representing '0' for the specified type.
+  /// Construct an SVal representing '0' for the specified type.
   DefinedOrUnknownSVal makeZeroVal(QualType type);
 
-  /// getRegionValueSymbolVal - make a unique symbol for value of region.
+  /// Make a unique symbol for value of region.
   DefinedOrUnknownSVal getRegionValueSymbolVal(const TypedValueRegion *region);
 
+  /// \brief Create a new symbol with a unique 'name'.
+  ///
+  /// We resort to conjured symbols when we cannot construct a derived symbol.
+  /// The advantage of symbols derived/built from other symbols is that we
+  /// preserve the relation between related(or even equivalent) expressions, so
+  /// conjured symbols should be used sparingly.
   DefinedOrUnknownSVal getConjuredSymbolVal(const void *symbolTag,
                                             const Expr *expr, unsigned count);
   DefinedOrUnknownSVal getConjuredSymbolVal(const void *symbolTag,
index 778a0bf97da749e9fb7bdb9a9cde1d4edb6527a3..331f5934b571d0d4942057713aef9f6dccafedb1 100644 (file)
@@ -90,23 +90,13 @@ DefinedOrUnknownSVal SValBuilder::getConjuredSymbolVal(const void *symbolTag,
                                                        const Expr *expr,
                                                        unsigned count) {
   QualType T = expr->getType();
-
-  if (!SymbolManager::canSymbolicate(T))
-    return UnknownVal();
-
-  SymbolRef sym = SymMgr.getConjuredSymbol(expr, count, symbolTag);
-
-  if (Loc::isLocType(T))
-    return loc::MemRegionVal(MemMgr.getSymbolicRegion(sym));
-
-  return nonloc::SymbolVal(sym);
+  return getConjuredSymbolVal(symbolTag, expr, T, count);
 }
 
 DefinedOrUnknownSVal SValBuilder::getConjuredSymbolVal(const void *symbolTag,
                                                        const Expr *expr,
                                                        QualType type,
                                                        unsigned count) {
-  
   if (!SymbolManager::canSymbolicate(type))
     return UnknownVal();