Enum cwe_checker_lib::analysis::graph::Edge
source · pub enum Edge<'a> {
Block,
Jump(&'a Term<Jmp>, Option<&'a Term<Jmp>>),
Call(&'a Term<Jmp>),
ExternCallStub(&'a Term<Jmp>),
CrCallStub,
CrReturnStub,
CallCombine(&'a Term<Jmp>),
ReturnCombine(&'a Term<Jmp>),
}
Expand description
The edge type of an interprocedural fixpoint graph.
Where applicable the edge carries a reference to the corresponding jump instruction.
For CRCombine
edges the corresponding jump is the call and not the return jump.
Intraprocedural jumps carry a second optional reference,
which is only set if the jump directly follows an conditional jump,
i.e. it represents the “conditional jump not taken” branch.
In this case the other jump reference points to the untaken conditional jump.
Variants§
Block
An edge between the BlkStart
and BlkEnd
nodes of a basic block.
Jump(&'a Term<Jmp>, Option<&'a Term<Jmp>>)
An edge corresponding to an intraprocedural jump instruction. If the jump is only taken if a previous conditional jump is not taken, then a reference to the untaken conditional jump is also added to the jump label.
Call(&'a Term<Jmp>)
An edge corresponding to a function call instruction. Only generated for calls to functions inside the binary. See the module-level documentation for more information.
ExternCallStub(&'a Term<Jmp>)
An edge corresponding to a call to a function not contained in the binary, i.e. the target is located in a shared object loaded by the binary. The edge goes directly from the callsite to the return-to-site inside the caller.
CrCallStub
An artificial edge. See the module-level documentation for more information.
CrReturnStub
An artificial edge. See the module-level documentation for more information.
CallCombine(&'a Term<Jmp>)
An artificial edge to combine intra- and interprocedural data flows at the callsite of calls. See the module-level documentation for more information.
ReturnCombine(&'a Term<Jmp>)
An artificial edge to combine intra- and interprocedural data flows at the return-to site of calls. See the module-level documentation for more information.
Trait Implementations§
source§impl<'a> PartialEq for Edge<'a>
impl<'a> PartialEq for Edge<'a>
impl<'a> Copy for Edge<'a>
impl<'a> Eq for Edge<'a>
impl<'a> StructuralEq for Edge<'a>
impl<'a> StructuralPartialEq for Edge<'a>
Auto Trait Implementations§
impl<'a> RefUnwindSafe for Edge<'a>
impl<'a> Send for Edge<'a>
impl<'a> Sync for Edge<'a>
impl<'a> Unpin for Edge<'a>
impl<'a> UnwindSafe for Edge<'a>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.