code: def _handle_job_without_successors(self, job, irsb, insn_addrs):
          
  
          # it's not an empty block
  
          # handle all conditional exits
          ins_addr = job.addr
          for stmt_idx, stmt in enumerate(irsb.statements):
              if type(stmt) is pyvex.IRStmt.IMark:
                  ins_addr = stmt.addr + stmt.delta
              elif type(stmt) is pyvex.IRStmt.Exit:
                  successor_jumpkind = stmt.jk
                  self._update_function_transition_graph(
                      job.block_id, None,
                      jumpkind = successor_jumpkind,
                      ins_addr=ins_addr,
                      stmt_idx=stmt_idx,
                  )
  
          # handle the default exit
          successor_jumpkind = irsb.jumpkind
          successor_last_ins_addr = insn_addrs[-1]
          self._update_function_transition_graph(job.block_id, None,
                                                 jumpkind=successor_jumpkind,
                                                 ins_addr=successor_last_ins_addr,
                                                 stmt_idx=DEFAULT_STATEMENT,
                                                 )
docs: A block without successors should still be handled so it can be added to the function graph correctly.
  
          :param CFGJob job:  The current job that do not have any successor.
          :param IRSB irsb:   The related IRSB.
          :param insn_addrs:  A list of instruction addresses of this IRSB.
          :return: None