CodeQL library for Java/Kotlin
codeql/java-all 7.8.0 (changelog, source)
Search

Class Sem::SsaPhiNode

A phi node in the SSA form. A phi node is a kind of node in the SSA form that represents a merge point where multiple control flow paths converge and the value of a variable needs to be selected according to which control flow path was taken. For example, in the following Ruby code:

if b
  x = 0
else
  x = 1
end
puts x

A phi node for x is inserted just before the call puts x, since the value of x may come from either x = 0 or x = 1.

Import path

import semmle.code.java.dataflow.RangeAnalysis

Direct supertypes

Indirect supertypes

Predicates

hasInputFromBlock

Holds if inp is an input to the phi node along the edge originating in bb.

Inherited predicates

definesAt

Holds if this SSA definition defines v at index i in basic block bb. Phi nodes are considered to be at index -1, while normal variable writes are at the index of the control flow node they wrap.

from Definition
getARead

Gets a read of this SSA definition.

from SsaDefinition
getAUse

Gets an expression reading the value of this SSA variable.

from SsaVariable
getAnUltimateDefinition

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

from SsaDefinition
getBasicBlock

Gets the basic block to which this SSA definition belongs.

from Definition
getControlFlowNode

Gets the control flow node of this SSA definition.

from SsaDefinition
getLocation

Gets the location of this SSA definition.

from Definition
getSourceVariable

Gets the source variable underlying this SSA definition.

from Definition
isLiveAtEndOfBlock

Holds if this SSA definition is live at the end of basic block bb. That is, this definition reaches the end of basic block bb, at which point it is still live, without crossing another SSA definition of the same source variable.

from SsaDefinition
toString

Gets a textual representation of this SSA definition.

from SsaDefinition