Skip to content
  1. Jan 25, 2010
    • Ted Kremenek's avatar
      Split libAnalysis into two libraries: libAnalysis and libChecker. · d6b87086
      Ted Kremenek authored
      (1) libAnalysis is a generic analysis library that can be used by
          Sema.  It defines the CFG, basic dataflow analysis primitives, and
          inexpensive flow-sensitive analyses (e.g. LiveVariables).
      
      (2) libChecker contains the guts of the static analyzer, incuding the
          path-sensitive analysis engine and domain-specific checks.
      
      Now any clients that want to use the frontend to build their own tools
      don't need to link in the entire static analyzer.
      
      This change exposes various obvious cleanups that can be made to the
      layout of files and headers in libChecker.  More changes pending.  :)
      
      This change also exposed a layering violation between AnalysisContext
      and MemRegion.  BlockInvocationContext shouldn't explicitly know about
      BlockDataRegions.  For now I've removed the BlockDataRegion* from
      BlockInvocationContext (removing context-sensitivity; although this
      wasn't used yet).  We need to have a better way to extend
      BlockInvocationContext (and any LocationContext) to add
      context-sensitivty.
      
      llvm-svn: 94406
      d6b87086
  2. Jan 11, 2010
  3. Nov 25, 2009
  4. Nov 10, 2009
  5. Nov 09, 2009
  6. Sep 09, 2009
  7. Aug 28, 2009
  8. Aug 23, 2009
  9. Aug 06, 2009
    • Ted Kremenek's avatar
      Implement lazy "copying" of structures and arrays in RegionStore. While · fa41714d
      Ted Kremenek authored
      RegionStore already lazily abstracted the contents of arrays and structs, when
      doing an assignment from one array/struct to another we did an explicit
      element-wise copy, which resulted in a loss of laziness and huge performance
      problem when analyzing many code bases.
      
      Now RegionStoreManager handles such assignments using a new SVal could
      'LazyCompoundSVal', which basically means the value of a given struct or array
      (a MemRegion*) in a specific state (GRState). When we do a load from a field
      whose encompassing struct binds to a LazyCompoundSVal, we essentially do a field
      lookup in the original structure. This means we have essentially zero copying of
      data for structs/arrays and everything stays lazy.
      
      llvm-svn: 78268
      fa41714d
  10. Jul 29, 2009
  11. Jul 14, 2009
  12. Jun 30, 2009
  13. Jun 26, 2009
    • Ted Kremenek's avatar
      Introduce a new concept to the static analyzer: SValuator. · 1642bdaa
      Ted Kremenek authored
      GRTransferFuncs had the conflated role of both constructing SVals (symbolic
      expressions) as well as handling checker-specific logic. Now SValuator has the
      role of constructing SVals from expressions and GRTransferFuncs just handles
      checker-specific logic. The motivation is by separating these two concepts we
      will be able to much more easily create richer constraint-generating logic
      without coupling it to the main checker transfer function logic.
      
      We now have one implementation of SValuator: SimpleSValuator.
      
      SimpleSValuator is essentially the SVal-related logic that was in GRSimpleVals
      (which is removed in this patch). This includes the logic for EvalBinOp,
      EvalCast, etc. Because SValuator has a narrower role than the old
      GRTransferFuncs, the interfaces are much simpler, and so is the implementation
      of SimpleSValuator compared to GRSimpleVals. I also did a line-by-line review of
      SVal-related logic in GRSimpleVals and cleaned it up while moving it over to
      SimpleSValuator.
      
      As a consequence of removing GRSimpleVals, there is no longer a
      '-checker-simple' option. The '-checker-cfref' did everything that option did
      but also ran the retain/release checker. Of course a user may not always wish to
      run the retain/release checker, nor do we wish core analysis logic buried in the
      checker-specific logic. The next step is to refactor the logic in CFRefCount.cpp
      to separate out these pieces into the core analysis engine.
      
      llvm-svn: 74229
      1642bdaa
  14. Jun 25, 2009
  15. Jun 23, 2009
  16. Jun 19, 2009
  17. Jun 18, 2009
  18. May 12, 2009
  19. May 09, 2009
  20. May 04, 2009
  21. Apr 21, 2009
  22. Apr 20, 2009
  23. Apr 11, 2009
  24. Apr 10, 2009
  25. Apr 09, 2009
Loading