Skip to content
  • 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
Loading