let rec process_stmt graph ~prev_list ~stmt =
let ki_stmt = Kstmt stmt in
add_links graph prev_list ki_stmt;
match stmt.skind with
| If (_,bthen,belse,_) ->
let last_then = process_block graph bthen in
let last_else = process_block graph belse in
last_then @ last_else
| Switch (_,blk,_,_)
| Block blk -> process_block graph blk
| UnspecifiedSequence seq ->
process_block graph (Cil.block_from_unspecified_sequence seq)
| Loop (_,body,_,_,_) ->
let last_list = process_block graph body in
add_links graph last_list ki_stmt; [ki_stmt]
| Instr _
| Return _ | Goto _ | Break _ | Continue _
| TryFinally _ | TryExcept _
-> [ki_stmt]
and process_tail graph prev_list tail =
match tail with
| [] -> prev_list
| s :: tail -> let s_last_stmt = process_stmt graph prev_list s in
let tail_last_stmt = process_tail graph s_last_stmt tail
in tail_last_stmt
and process_block graph blk = process_tail graph [Kglobal] blk.bstmts