Skip to content
  1. Jan 27, 2009
  2. Jan 22, 2009
    • Ted Kremenek's avatar
      Static analyzer: Remove a bunch of outdated SymbolData objects and · 74040833
      Ted Kremenek authored
      their associated APIs.  We no longer need separate SymbolData objects
      for fields, variables, etc.  Instead, we now associated symbols with
      the "rvalue" of a MemRegion (i.e., the value stored at that region).
      Now we only have two kinds of SymbolData objects: SymbolRegionRValue
      and SymbolConjured.
      
      This cleanup also makes the distinction between a SymbolicRegion and a
      symbolic value that is a location much clearer.  A SymbolicRegion
      represents a chunk of symbolic memory, while a symbolic location is
      just a "pointer" with different possible values.  Without any specific
      knowledge, a symbolic location resolves (i.e., via a dereference) to a
      SymbolicRegion.  In the future, when we do better alias reasoning, a
      symbolic location can become an alias for another location, thus
      merging the constraints on the referred SymbolicRegion with the other
      region.
      
      llvm-svn: 62769
      74040833
  3. Jan 21, 2009
  4. Jan 07, 2009
  5. Dec 21, 2008
  6. Dec 20, 2008
    • Zhongxing Xu's avatar
      Lazy bingding for region-store manager. · af7415ff
      Zhongxing Xu authored
      * Now Bind() methods take and return GRState* because binding could
        also alter GDM.
      * No variables are initialized except those declared with initial
        values.
      * failed C test cases are due to bugs in RemoveDeadBindings(),
      which removes constraints that is still alive. This will be fixed in later
      patch.
      * default value of array and struct regions will be implemented in later patch.
      
      llvm-svn: 61274
      af7415ff
  7. Dec 13, 2008
    • Ted Kremenek's avatar
      MemRegion: · b5670fd5
      Ted Kremenek authored
      - Overhauled the notion of "types" for TypedRegions.  We now distinguish between the "lvalue" of a region (via getLValueRegion()) and the "rvalue" of a region (va getRValueRegion()).  Since a region represents a chunk of memory it has both, but we were conflating these concepts in some cases, leading to some insidious bugs.
      - Removed AnonPointeeType, partially because it is unused and because it doesn't have a clear notion of lvalue vs rvalue type.  We can add it back once there is a need for it and we can resolve its role with these concepts.
      
      StoreManager:
      - Overhauled StoreManager::CastRegion.  It expects an *lvalue* type for a region.  This is actually what motivated the overhaul to the MemRegion type mechanism.  It also no longer returns an SVal; we can just return a MemRegion*.
      - BasicStoreManager::CastRegion now overlays an "AnonTypedRegion" for pointer-pointer casts.  This matches with the MemRegion changes.
      - Similar changes to RegionStore, except I've added a bunch of FIXMEs where it wasn't 100% clear where we should use TypedRegion::getRValueRegion() or TypedRegion::getLValueRegion().
      
      AuditCFNumberCreate check:
      - Now blasts through AnonTypedRegions that may layer the original memory region, thus checking if the actually memory block is of the appropriate type.  This change was needed to work with the changes to StoreManager::CastRegion.
      
      GRExprEngine::VisitCast:
      - Conform to the new interface of StoreManager::CastRegion.
      
      Tests:
      - None of the analysis tests fail now for using the "basic store".
      - Disabled the tests 'array-struct.c' and 'rdar-6442306-1.m' pending further testing and bug fixing.
      
      llvm-svn: 60995
      b5670fd5
    • Ted Kremenek's avatar
      A series of cleanups/fixes motivated by <rdar://problem/6442306>: · f065b15f
      Ted Kremenek authored
      GRExprEngine (VisitCast):
      - When using StoreManager::CastRegion, always use the state and value it returns to generate the next node.  Failure to do so means that region values returned that don't require the state to be modified will get ignored.
      
      MemRegion:
      - Tighten the interface for ElementRegion.  Now ElementRegion can only be created with a super region that is a 'TypedRegion' instead of any MemRegion.  Code in BasicStoreManager/RegionStoreManager already assumed this, but it would result in a dynamic assertion check (and crash) rather than just having the compiler forbid the construction of such regions.
      - Added ElementRegion::getArrayRegion() to return the 'typed version' of an ElementRegion's super region.
      - Removed bogus assertion in ElementRegion::getType() that assumed that the super region was an AnonTypedRegion.  All that matters is that it is a TypedRegion, which is now true all the time by design.
      
      BasicStore:
      - Modified getLValueElement() to check if the 'array' region is a TypedRegion before creating an ElementRegion.  This conforms to the updated interface for ElementRegion.
      
      RegionStore:
      - In ArrayToPointer() gracefully handle things we don't reason about, and only create an ElementRegion if the array region is indeed a TypedRegion.
      
      llvm-svn: 60990
      f065b15f
  8. Dec 10, 2008
  9. Dec 09, 2008
  10. Dec 05, 2008
  11. Dec 04, 2008
  12. Nov 28, 2008
  13. Nov 24, 2008
  14. Nov 16, 2008
  15. Nov 15, 2008
  16. Nov 12, 2008
  17. Nov 07, 2008
  18. Oct 29, 2008
    • Zhongxing Xu's avatar
      Rename: AddDecl => BindDecl · 628ae879
      Zhongxing Xu authored
      BindDecl better describes what the function does:
        - Bind the VarDecl to its memory region
        - Bind the memory region to some initial value.
      
      llvm-svn: 58359
      628ae879
  19. Oct 27, 2008
    • Ted Kremenek's avatar
      Added preliminary support for CompoundLiterals in the static analyzer: · bf263682
      Ted Kremenek authored
      - GRExprEngine::VisitCompoundLiteral...
         (1) visits the initializer list (generating ExplodedNodes)
         (2) creates a CompoundMemRegion for the literal
         (3) creates a new state with the bound literal values using
             GRStateManager::BindCompoundLiteral
      
      - GRStateManager::BindCompoundLiteral simply calls 
        StoreManager::BindCompoundLiteral to get a new store and returns a persistent
        GRState with that store.
      
      - BasicStore::BindCompoundLiteral simply returns the same store, as it
        doesn't handle field sensitivity
        
      - RegionStore::BindCompoundLiteral currently fires an assert (pending discussion
        of how to best implement mappings for CompoundLiteralRegion).
      
      llvm-svn: 58277
      bf263682
  20. Oct 26, 2008
  21. Oct 25, 2008
  22. Oct 24, 2008
  23. Oct 23, 2008
  24. Oct 22, 2008
  25. Oct 21, 2008
  26. Oct 18, 2008
  27. Oct 17, 2008
  28. Oct 16, 2008
  29. Oct 07, 2008
Loading