CodeQL library for C/C++

Class SsaDefinition

A definition of one or more SSA variables, including phi node definitions. An SSA variable, as defined in the literature, is effectively the pair of an SsaDefinition d and a StackVariable v, written (d, v) in this documentation. Note that definitions and uses can be coincident due to the presence of parameter definitions and phi nodes.

Not all StackVariables of a function have SSA definitions. If the variable has its address taken, either explicitly or implicitly, then it is excluded from analysis. SsaDefinitions are not generated in locations that are statically seen to be unreachable.

Import path

import cpp

Direct supertypes

Indirect supertypes

Known direct subtypes



Holds if the SSA variable (this, p) is defined by parameter p.


Holds if the SSA variable (result, v) is an input to the phi definition (this, v).


Gets a use of the SSA variable represented by the pair (this, v).


Gets a variable corresponding to an SSA StackVariable defined by this definition.


Gets a possible defining expression for v at this SSA definition, recursing backwards through phi definitions. Not all definitions have a defining expression—see the documentation for getDefiningValue.


DEPRECATED: this is the old name for getAnUltimateDefiningValue. The name was confusing as it seemed analogous to getDefinition rather than getDefiningValue. The SSA libraries for other languages use the name getAnUltimateSsaDefinition to refer to a predicate named getAnUltimateSsaDefinition in this class.


Gets a definition that ultimately defines this variable and is not itself a phi node.


Gets the BasicBlock containing this definition.


Gets the expression assigned to the SSA variable (this, v), if any, when it is not a phi definition. The following is an exhaustive list of expressions that may be the result of this predicate.


Gets the control-flow node for this definition. This will usually be the control-flow node that assigns to this variable as a side effect, but there are some exceptions. If this is defined by initialization, the result is the value of Initializer.getExpr() for that initialization. If this is a function parameter (see definedByParameter), the result will be the function entry point. If this variable is defined by being passed as a reference in a function call, including overloaded operators, the result will be the VariableAccess expression for this parameter. If this is a phi node (see isPhiNode), the result will be the node where control flow is joined from multiple paths.


Gets the location of this definition.


Holds if this definition is a phi node for variable v.


Holds if (this, v) reaches the end of basic block b.


Gets a string representation of the SSA variable represented by the pair (this, v).

Inherited predicates


Gets the name of a primary CodeQL class to which this element belongs.

from ElementBase

DEPRECATED: use getAPrimaryQlClass instead.

from ElementBase

Gets a textual representation of this element.

from ElementBase