Skip to content
  • Ted Kremenek's avatar
    Add (initial?) static analyzer support for handling C++ references. · 4cad5fc0
    Ted Kremenek authored
    This change was a lot bigger than I originally anticipated; among
    other things it requires us storing more information in the CFG to
    record what block-level expressions need to be evaluated as lvalues.
    
    The big change is that CFGBlocks no longer contain Stmt*'s by
    CFGElements.  Currently CFGElements just wrap Stmt*, but they also
    store a bit indicating whether the block-level expression should be
    evalauted as an lvalue.  DeclStmts involving the initialization of a
    reference require us treating the initialization expression as an
    lvalue, even though that information isn't recorded in the AST.
    Conceptually this change isn't that complicated, but it required
    bubbling up the data through the CFGBuilder, to GRCoreEngine, and
    eventually to GRExprEngine.
    
    The addition of CFGElement is also useful for when we want to handle
    more control-flow constructs or other data we want to keep in the CFG
    that isn't represented well with just a block of statements.
    
    In GRExprEngine, this patch introduces logic for evaluating the
    lvalues of references, which currently retrieves the internal "pointer
    value" that the reference represents.  EvalLoad does a two stage load
    to catch null dereferences involving an invalid reference (although
    this could possibly be caught earlier during the initialization of a
    reference).
    
    Symbols are currently symbolicated using the reference type, instead
    of a pointer type, and special handling is required creating
    ElementRegions that layer on SymbolicRegions (see the changes to
    RegionStoreManager).
    
    Along the way, the DeadStoresChecker also silences warnings involving
    dead stores to references.  This was the original change I introduced
    (which I wrote test cases for) that I realized caused GRExprEngine to
    crash.
    
    llvm-svn: 91501
    4cad5fc0
Loading