retdec
|
A CFG traversal that checks whether a variable is modified prior to every read access to it starting from a given statement. More...
#include <modified_before_read_cfg_traversal.h>
Static Public Member Functions | |
static bool | isModifiedBeforeEveryRead (ShPtr< Variable > var, ShPtr< Statement > startStmt, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio) |
Returns true if the given variable var is modified prior to every read access to it in cfg, starting from startStmt. More... | |
Private Member Functions | |
ModifiedBeforeReadCFGTraversal (ShPtr< Variable > var, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio) | |
Constructs a new traverser. More... | |
virtual bool | visitStmt (ShPtr< Statement > stmt) override |
Visits the given statement stmt. More... | |
virtual bool | getEndRetVal () const override |
Returns the value that should be returned when an end of the traversal is reached. More... | |
virtual bool | combineRetVals (bool origRetVal, bool newRetVal) const override |
Computes a new return value from the original return value (origRetVal) and the new return value (newRetVal). More... | |
Private Attributes | |
ShPtr< Variable > | var |
Variable whose modification is looked for. More... | |
ShPtr< ValueAnalysis > | va |
Analysis of values. More... | |
ShPtr< CallInfoObtainer > | cio |
Obtainer of information about function calls. More... | |
bool | wasModifiedBeforeEveryRead |
Was the variable modified before every read? More... | |
Additional Inherited Members | |
![]() | |
CFGTraversal (ShPtr< CFG > cfg, bool defaultCurrRetVal) | |
Constructs a new traverser. More... | |
~CFGTraversal ()=default | |
bool | getCurrRetVal () const |
Returns the value that should be returned as the result of visiting a statement. More... | |
bool | performTraversal (ShPtr< Statement > startStmt) |
Performs a traversal of the current CFG, starting at startStmt. More... | |
bool | performTraversalFromSuccessors (ShPtr< Statement > stmt) |
Performs a traversal of the current CFG, starting at the successor(s) of stmt. More... | |
bool | performReverseTraversal (ShPtr< Statement > startStmt) |
Performs a reverse traversal of the current CFG, starting at startStmt. More... | |
bool | performReverseTraversalFromPredecessors (ShPtr< Statement > stmt) |
Performs a reverse traversal of the current CFG, starting at the predecessor(s) of stmt. More... | |
![]() | |
ShPtr< CFG > | cfg |
CFG that is being traversed. More... | |
StmtUSet | checkedStmts |
Statements that have been checked (to prevent looping). More... | |
bool | currRetVal |
Current return value of visitStmt(). More... | |
bool | stopTraversal |
Should the traversal be stopped? More... | |
A CFG traversal that checks whether a variable is modified prior to every read access to it starting from a given statement.
Instances of this class have reference object semantics. This is a concrete traverser which should not be subclassed.
|
private |
Constructs a new traverser.
See the description of isModifiedBeforeEveryRead() for information on the parameters.
|
overrideprivatevirtual |
Computes a new return value from the original return value (origRetVal) and the new return value (newRetVal).
Implements retdec::llvmir2hll::CFGTraversal.
|
overrideprivatevirtual |
Returns the value that should be returned when an end of the traversal is reached.
For example, the end may mean the end node of the CFG or a statement that has already been traversed.
Implements retdec::llvmir2hll::CFGTraversal.
|
static |
Returns true
if the given variable var is modified prior to every read access to it in cfg, starting from startStmt.
[in] | var | Variable whose modification is looked for. |
[in] | startStmt | Statement from which the traversal should start. |
[in] | cfg | CFG that should be traversed. |
[in] | va | Analysis of values. |
[in] | cio | Obtainer of information about function calls. |
This function leaves va in a valid state.
If the variable is not modified at all, this function also returns false
.
|
overrideprivatevirtual |
Visits the given statement stmt.
return true
if the traversing should continue, false
otherwise.
Note: checkedStmts
is modified in CFGTraversal, so it is not necessary for the implementation of this function to add stmt to checkedStmts
.
If you want the traversal to end prematurely, set the stopTraversal variable to true
. Otherwise, if you just return false
, the traversal may still continue from other branches because of recursion.
Implements retdec::llvmir2hll::CFGTraversal.
|
private |
Obtainer of information about function calls.
|
private |
Analysis of values.
Variable whose modification is looked for.
|
private |
Was the variable modified before every read?