pub fn add_indirect_cf(
        &mut self,
        selector: &T::ValueRef,
        current_addr: &mut MAddress,
        edge_type: u8,
    ) {
        let source_block = self.block_of(*current_addr).unwrap_or_else(|| {
            radeco_err!("Block not found @ {:?}", current_addr);
            self.ssa.invalid_action().unwrap()
        });
        let unexplored_addr = MAddress::new(self.unexplored_addr, 0);

        // Decrement the unexplored addr so that we have a new unexplored block for next use
        self.unexplored_addr = self.unexplored_addr - 1;

        let unexplored_block = self.new_block(unexplored_addr);

        self.blocks.insert(unexplored_addr, unexplored_block);
        self.ssa
            .insert_control_edge(source_block, unexplored_block, edge_type);

        // Add a dummy ITE to mark the selector.
        let op_node = self.add_op(
            &MOpcode::OpITE,
            current_addr,
            ValueInfo::new_scalar(ir::WidthSpec::Known(1)),
        );

        self.op_use(&op_node, 0, selector);
    }
// Function to add an indirect control flow transfer
Function to add an indirect control flow transfer
Function to add an indirect control flow transfer
pub fn add_indirect_cf(
        &mut self,
        selector: &T::ValueRef,
        current_addr: &mut MAddress,
        edge_type: u8,
    ) {
        let source_block = self.block_of(*current_addr).unwrap_or_else(|| {
            radeco_err!("Block not found @ {:?}", current_addr);
            self.ssa.invalid_action().unwrap()
        });
        let unexplored_addr = MAddress::new(self.unexplored_addr, 0);
        // Decrement the unexplored addr so that we have a new unexplored block for next use
        self.unexplored_addr = self.unexplored_addr - 1;
        let unexplored_block = self.new_block(unexplored_addr);
        self.blocks.insert(unexplored_addr, unexplored_block);
        self.ssa
            .insert_control_edge(source_block, unexplored_block, edge_type);
        // Add a dummy ITE to mark the selector.
        let op_node = self.add_op(
            &MOpcode::OpITE,
            current_addr,
            ValueInfo::new_scalar(ir::WidthSpec::Known(1)),
        );
        self.op_use(&op_node, 0, selector);
    }
pub fn add_indirect_cf ( & mut self , selector : & T :: ValueRef , current_addr : & mut MAddress , edge_type : u8 , ) { let source_block = self . block_of ( * current_addr ) . unwrap_or_else ( | | { radeco_err ! ( " " current_addr ) ; self . ssa . invalid_action ( ) . unwrap ( ) } ) ; let unexplored_addr = MAddress :: new ( self . unexplored_addr , 0 ) ; // Decrement the unexplored addr so that we have a new unexplored block for next use self . unexplored_addr = self . unexplored_addr - 1 ; let unexplored_block = self . new_block ( unexplored_addr ) ; self . blocks . insert ( unexplored_addr , unexplored_block ) ; self . ssa . insert_control_edge ( source_block , unexplored_block , edge_type ) ; // Add a dummy ITE to mark the selector. let op_node = self . add_op ( & MOpcode :: OpITE , current_addr , ValueInfo :: new_scalar ( ir :: WidthSpec :: Known ( 1 ) ) , ) ; self . op_use ( & op_node , 0 , selector ) ; }
Function to add an indirect control flow transfer
Function to add an indirect control flow transfer
&mut self
selector
&T::ValueRef
current_addr
&mut MAddress
edge_type
u8
&mut self
selector
&T::ValueRef
current_addr
&mut MAddress
edge_type
u8