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.
version: "1"
id
id:string
The unique identifier of this edge.
source
source:string
The unique identifier of the source node of this edge.
target
target:string
The unique identifier of the target node of this edge.
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:
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 theif
branch to theelse
branch as fake.Another example is the following code:
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.