Skip to content
  1. Mar 24, 2012
  2. Mar 22, 2012
  3. Mar 21, 2012
    • Benjamin Kramer's avatar
      Remove unused variable, fix indentation. · c25c5e0b
      Benjamin Kramer authored
      llvm-svn: 153220
      c25c5e0b
    • Anna Zaks's avatar
      [analyzer] Malloc: Utter the name of the leaked variable. · fc2e1534
      Anna Zaks authored
      Specifically, we use the last store of the leaked symbol in the leak diagnostic.
      (No support for struct fields since the malloc checker doesn't track those
      yet.)
      
      + Infrastructure to track the regions used in store evaluations.
      This approach is more precise than iterating the store to
      obtain the region bound to the symbol, which is used in RetainCount
      checker. The region corresponds to what is uttered in the code in the
      last store and we do not rely on the store implementation to support
      this functionality.
      
      llvm-svn: 153212
      fc2e1534
  4. Mar 18, 2012
    • Jordy Rose's avatar
      [analyzer] Mark a failed-realloc's result as an interesting symbol between the... · bf38f20e
      Jordy Rose authored
      [analyzer] Mark a failed-realloc's result as an interesting symbol between the realloc call and the null check, so we get nicer path notes. Fixes a regression introduced by the diagnostic pruning added in r152361.
      
      This is accomplished by calling markInteresting /during/ path diagnostic generation, and as such relies on deterministic ordering of BugReporterVisitors -- namely, that BugReporterVisitors are run in /reverse/ order from how they are added. (Right now that's a consequence of storing visitors in an ImmutableList, where new items are added to the front.) It's a little hacky, but it works for now.
      
      I think this is the best we can do without storing the relation between the old and new symbols, and that would be a hit whether or not there ends up being an error.
      
      llvm-svn: 153010
      bf38f20e
  5. Mar 17, 2012
    • Anna Zaks's avatar
      [analyzer] Shorten the stack hint diagnostic. · a7f457a5
      Anna Zaks authored
      Do not display the standard "Returning from 'foo'", when a stack hint is
      available.
      
      llvm-svn: 152964
      a7f457a5
    • Anna Zaks's avatar
      [analyzer] Create symbol-aware stack hints (building upon r152837). · cba4f298
      Anna Zaks authored
      The symbol-aware stack hint combines the checker-provided message
      with the information about how the symbol was passed to the callee: as
      a parameter or a return value.
      
      For malloc, the generated messages look like this :
      "Returning from 'foo'; released memory via 1st parameter"
      "Returning from 'foo'; allocated memory via 1st parameter"
      "Returning from 'foo'; allocated memory returned"
      "Returning from 'foo'; reallocation of 1st parameter failed"
      
      
      (We are yet to handle cases when the symbol is a field in a struct or
      an array element.)
      
      llvm-svn: 152962
      cba4f298
  6. Mar 15, 2012
    • Anna Zaks's avatar
      [analyzer] Allow checkers to supply call stack diagnostic hints for the · 1ff57d57
      Anna Zaks authored
      BugVisitor DiagnosticPieces.
      
      When checkers create a DiagnosticPieceEvent, they can supply an extra
      string, which will be concatenated with the call exit message for every
      call on the stack between the diagnostic event and the final bug report.
      (This is a simple version, which could be/will be further enhanced.)
      
      For example, this is used in Malloc checker to produce the ",
      which allocated memory" in the following example:
      
      static char *malloc_wrapper() { // 2. Entered call from 'use'
          return malloc(12);    // 3. Memory is allocated
      }
      
      void use() {
          char *v;
          v = malloc_wrapper(); // 1. Calling 'malloc_wrappers'
              // 4. Returning from 'malloc_wrapper', which allocated memory
      }                         // 5. Memory is never released; potential
      memory leak
      
      llvm-svn: 152837
      1ff57d57
  7. Mar 09, 2012
    • Ted Kremenek's avatar
      [analyzer] Implement basic path diagnostic pruning based on "interesting" symbols and regions. · 1e809b4c
      Ted Kremenek authored
      Essentially, a bug centers around a story for various symbols and regions.  We should only include
      the path diagnostic events that relate to those symbols and regions.
      
      The pruning is done by associating a set of interesting symbols and regions with a BugReporter, which
      can be modified at BugReport creation or by BugReporterVisitors.
      
      This patch reduces the diagnostics emitted in several of our test cases.  I've vetted these as
      having desired behavior.  The only regression is a missing null check diagnostic for the return
      value of realloc() in test/Analysis/malloc-plist.c.  This will require some investigation to fix,
      and I have added a FIXME to the test case.
      
      llvm-svn: 152361
      1e809b4c
  8. Mar 06, 2012
  9. Mar 05, 2012
  10. Mar 01, 2012
  11. Feb 29, 2012
    • Anna Zaks's avatar
      [analyzer] Malloc: A pointer might escape through CFContainers APIs, · e0c03cab
      Anna Zaks authored
      funopen, setvbuf.
      
      Teach the checker and the engine about these APIs to resolve malloc
      false positives. As I am adding more of these APIs, it is clear that all
      this should be factored out into a separate callback (for example,
      region escapes). Malloc, KeyChainAPI and RetainRelease checkers could
      all use it.
      
      llvm-svn: 151737
      e0c03cab
  12. Feb 28, 2012
  13. Feb 25, 2012
    • Anna Zaks's avatar
      [analyzer] Malloc: reason about the ObjC messages and C++. · 7ac344a4
      Anna Zaks authored
      Assume none of the ObjC messages defined in system headers free memory,
      except for the ones containing 'freeWhenDone' selector. Currently, just
      assume that the region escapes to the messages with 'freeWhenDone'
      (ideally, we want to treat it as 'free()').
      
      For now, always assume that regions escape when passed to C++ methods.
      
      llvm-svn: 151410
      7ac344a4
  14. Feb 23, 2012
    • Anna Zaks's avatar
      [analyzer] Malloc: unique leak reports by allocation site. · df901a44
      Anna Zaks authored
      When we find two leak reports with the same allocation site, report only
      one of them.
      
      Provide a helper method to BugReporter to facilitate this.
      
      llvm-svn: 151287
      df901a44
    • Anna Zaks's avatar
      [analyzer] Invalidate the region passed to pthread_setspecific() call. · 07de9c12
      Anna Zaks authored
      Make this call an exception in ExprEngine::invalidateArguments:
      'int pthread_setspecific(ptheread_key k, const void *)' stores
      a value into thread local storage. The value can later be retrieved
      with 'void *ptheread_getspecific(pthread_key)'. So even thought the
      parameter is 'const void *', the region escapes through the
      call.
      
      (Here we just blacklist the call in the ExprEngine's default
      logic. Another option would be to add a checker which evaluates
      the call and triggers the call to invalidate regions.)
      
      Teach the Malloc Checker, which treats all system calls as safe about
      the API.
      
      llvm-svn: 151220
      07de9c12
  15. Feb 22, 2012
  16. Feb 20, 2012
  17. Feb 17, 2012
  18. Feb 16, 2012
  19. Feb 15, 2012
  20. Feb 14, 2012
    • Anna Zaks's avatar
      [analyzer] Make Malloc Checker optimistic in presence of inlining. · 3d34834b
      Anna Zaks authored
      (In response of Ted's review of r150112.)
      
      This moves the logic which checked if a symbol escapes through a
      parameter to invalidateRegionCallback (instead of post CallExpr visit.)
      
      To accommodate the change, added a CallOrObjCMessage parameter to
      checkRegionChanges callback.
      
      llvm-svn: 150513
      3d34834b
    • Anna Zaks's avatar
      [analyzer] Malloc Checker: realloc: add dependency between the symbols · ad01ef5f
      Anna Zaks authored
      in realloc map. 
      
      If there is no dependency, the reallocated ptr will get garbage
      collected before we know that realloc failed, which would lead us to
      missing a memory leak warning.
      
      Also added new test cases, which we can handle now.
      Plus minor cleanups.
      
      llvm-svn: 150446
      ad01ef5f
  21. Feb 13, 2012
    • Anna Zaks's avatar
      [analyzer] Malloc Checker: realloc: correct the way we are handing the · 8fd0f2a6
      Anna Zaks authored
      case when size is 0.
      
      llvm-svn: 150412
      8fd0f2a6
    • Anna Zaks's avatar
      [analyzer] Malloc checker: rework realloc handling: · d56c8794
      Anna Zaks authored
      1) Support the case when realloc fails to reduce False Positives. (We
      essentially need to restore the state of the pointer being reallocated.)
      
      2) Realloc behaves differently under special conditions (from pointer is
      null, size is 0). When detecting these cases, we should consider
      under-constrained states (size might or might not be 0). The
      old version handled this in a very hacky way. The code did not
      differentiate between definite and possible (no consideration for
      under-constrained states). Further, after processing each special case,
      the realloc processing function did not return but chained to the next
      special case processing. So you could end up in an execution in which
      you first see the states in which size is 0 and realloc ~ free(),
      followed by the states corresponding to size is not 0 followed by the
      evaluation of the regular realloc behavior.
      
      llvm-svn: 150402
      d56c8794
  22. Feb 12, 2012
  23. Feb 11, 2012
  24. Feb 10, 2012
  25. Feb 09, 2012
Loading