Provides classes and predicates for working with C/C++ code.
def is a (potential) assignment to stack variable
v. That is, the variable may hold another value in the control-flow node(s) following
def than before.
barrier is either a (potential) definition of
v or follows an access that gets the address of
v. In both cases, the value of
barrier cannot be assumed to be the same as before.
va is a variable passed by reference as argument
def, where the callee potentially assigns the corresponding parameter. The definitions-and-uses library models assignment by reference as if it happens on evaluation of the argument,
Holds if the definition
def of some stack variable can reach
node, which is a definition or use, without crossing definitions of the same variable.
Computed relation: A “definition-use-pair” for a particular variable. Intuitively, this means that
def is an assignment to
use is a read of
var at which the value assigned by
def may be read. (There can be more than one definition reaching a single use, and a single definition can reach many uses.)
def is a (definite) assignment to the stack variable
e is the assigned expression.
va is a use of the parameter
p that could observe the passed-in value.
use is a non-definition use of stack variable
v. This will not include accesses on the LHS of an assignment (which don’t retrieve the variable value), but will include accesses in increment/decrement operations.
useOfVar(v, use), but with the extra condition that the access
use actually reads the value of the stack variable
v at run-time. (Non-examples include
&x and function calls where the callee does not use the relevant parameter.)
A use/use pair is a pair of uses of a particular variable
var where the same value might be read (meaning that there is a control-flow path from
second without crossing a definition of