Whether the edge is fake. Fake edges guarantee that this control flow path is actually never followed in runtime, even though the edge might be needed for algorithms to work properly (for instance, to maintain post-dominance properties).
For a concrete example, consider the following code:
if (true) {
...
} else {
...
}
Although it may make sense to represent this as a conditional node
with two outgoing control flow edges, in practice, the else
branch
is never executed. Therefore, it may make sense to mark the edge
connecting the if
branch to the else
branch as fake.
Another example is the following code:
goback:
...
goto goback;
...
This is effectively an infinite loop. However, to ensure that the end
of the function post-dominates the loop, it may be necessary to have
a fake edge connecting the goto
statement to the next statement.
The unique identifier of this edge.
The unique identifier of the source node of this edge.
The unique identifier of the target node of this edge.
Data contained in this edge type.