Skip to content
Snippets Groups Projects
  1. Mar 03, 2017
  2. Mar 02, 2017
  3. Feb 28, 2017
  4. Feb 27, 2017
  5. Nov 08, 2013
  6. Aug 29, 2013
  7. Oct 17, 2012
    • Jordan Rose's avatar
      [analyzer] When binding to a ParenExpr, bind to its inner expression instead. · d4ce811a
      Jordan Rose authored
      This actually looks through several kinds of expression, such as
      OpaqueValueExpr and ExprWithCleanups. The idea is that binding and lookup
      should be consistent, and so if the environment needs to be modified later,
      the code doing the modification will not have to manually look through these
      "transparent" expressions to find the real binding to change.
      
      This is necessary for proper updating of struct rvalues as described in
      the previous commit.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166121 91177308-0d34-0410-b5e6-96231b3b80d8
      d4ce811a
    • Jordan Rose's avatar
      [analyzer] Create a temporary region when accessing a struct rvalue. · f1e67d75
      Jordan Rose authored
      In C++, rvalues that need to have their address taken (for example, to be
      passed to a function by const reference) will be wrapped in a
      MaterializeTemporaryExpr, which lets CodeGen know to create a temporary
      region to store this value. However, MaterializeTemporaryExprs are /not/
      created when a method is called on an rvalue struct, even though the 'this'
      pointer needs a valid value. CodeGen works around this by creating a
      temporary region anyway; now, so does the analyzer.
      
      The analyzer also does this when accessing a field of a struct rvalue.
      This is a little unfortunate, since the rest of the struct will soon be
      thrown away, but it does make things consistent with the rest of the
      analyzer.
      
      This allows us to bring back the assumption that all known 'this' values
      are Locs. This is a revised version of r164828-9, reverted in r164876-7.
      
      <rdar://problem/12137950>
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166120 91177308-0d34-0410-b5e6-96231b3b80d8
      f1e67d75
  8. Oct 01, 2012
  9. Sep 29, 2012
  10. Sep 28, 2012
  11. Sep 05, 2012
  12. Sep 01, 2012
    • Jordan Rose's avatar
      [analyzer] Treat all struct values as regions (even rvalues). · 02df4f0a
      Jordan Rose authored
      This allows us to correctly symbolicate the fields of structs returned by
      value, as well as get the proper 'this' value for when methods are called
      on structs returned by value.
      
      This does require a moderately ugly hack in the StoreManager: if we assign
      a "struct value" to a struct region, that now appears as a Loc value being
      bound to a region of struct type. We handle this by simply "dereferencing"
      the struct value region, which should create a LazyCompoundVal.
      
      This should fix recent crashes analyzing LLVM and on our internal buildbot.
      
      <rdar://problem/12137950>
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163066 91177308-0d34-0410-b5e6-96231b3b80d8
      02df4f0a
Loading