diff --git a/src/plugins/value/domains/traces/traces_domain.ml b/src/plugins/value/domains/traces/traces_domain.ml index 8e8296daf464f235bedf01b2ffb1965bec21049e..334f722ea511cd9b01e696f15bded7767a7a1049 100644 --- a/src/plugins/value/domains/traces/traces_domain.ml +++ b/src/plugins/value/domains/traces/traces_domain.ml @@ -330,16 +330,24 @@ module Internal = struct `Value(Traces.add_edge state (Assume(0,e,pos))) let start_call _stmt call _valuation state = - let msg = - Format.asprintf "start_call: %a" (Pretty_utils.pp_list ~sep:",@ " - (fun fmt v -> Cil_datatype.Varinfo.pretty fmt v.Eval.formal)) - call.Eval.arguments in + let msg = Format.asprintf "start_call: %s" (Kernel_function.get_name call.Eval.kf) in let state = Traces.add_edge state (Msg(0,msg)) in + let formals = List.map (fun arg -> arg.Eval.formal) call.Eval.arguments in + let state = Traces.add_edge state (EnterScope(0,formals)) in + let state = List.fold_left (fun state arg -> + Traces.add_edge state (Assign(0, + Cil.var arg.Eval.formal, + arg.Eval.formal.Cil_types.vtype, + arg.Eval.concrete))) state call.Eval.arguments in `Value state let finalize_call _stmt call ~pre:_ ~post = - `Value (Traces.add_edge post (Msg(0,Format.asprintf "finalize_call: %a" - (Pretty_utils.pp_opt Cil_datatype.Varinfo.pretty) call.Eval.return))) + let state = post in + let msg = Format.asprintf "finalize_call: %s" (Kernel_function.get_name call.Eval.kf) in + let state = Traces.add_edge state (Msg(0,msg)) in + (* let formals = List.map (fun arg -> arg.Eval.formal) call.Eval.arguments in *) + (* let state = Traces.add_edge state (LeaveScope(0,formals)) in *) + `Value state let update _valuation state = `Value state diff --git a/tests/value/traces/oracle/test2.res.oracle b/tests/value/traces/oracle/test2.res.oracle index 52bb89001275159df17551cb2a5ce176e55eae48..7a40e8f876e0eace697193ed9a22f9c27088b015 100644 --- a/tests/value/traces/oracle/test2.res.oracle +++ b/tests/value/traces/oracle/test2.res.oracle @@ -24,61 +24,65 @@ tests/value/traces/test2.i:20:[value] Frama_C_dump_each: 3 -> ([ Assume: c false -> 4; Assume: c true -> 5 ]) 4 -> ([ Assign: tmp = 2 -> 8 ]) 5 -> ([ Assign: tmp = 1 -> 7 ]) - 7 -> ([ start_call: j -> 9 ]) - 8 -> ([ start_call: j -> 53 ]) - 9 -> ([ EnterScope: i -> 10 ]) - 10 -> ([ initialize variable: i -> 11 ]) - 11 -> ([ Assign: i = 0 -> 12 ]) - 12 -> ([ enter_loop -> 13 ]) - 13 -> ([ Assume: i < 3 true -> 14 ]) - 14 -> ([ Assign: j = j + 1 -> 15 ]) - 15 -> ([ Assign: i = i + 1 -> 16 ]) - 16 -> ([ incr_loop_counter -> 17 ]) - 17 -> ([ Assume: i < 3 true -> 19 ]) - 19 -> ([ Assign: j = j + 1 -> 20 ]) - 20 -> ([ Assign: i = i + 1 -> 21 ]) - 21 -> ([ incr_loop_counter -> 23 ]) - 23 -> ([ Assume: i < 3 true -> 25 ]) - 25 -> ([ Assign: j = j + 1 -> 26 ]) - 26 -> ([ Assign: i = i + 1 -> 27 ]) - 27 -> ([ incr_loop_counter -> 29 ]) - 29 -> ([ Assume: i < 3 false -> 31 ]) - 31 -> ([ leave_loop -> 32 ]) - 32 -> ([ LeaveScope: i -> 33 ]) - 33 -> ([ EnterScope: \result<loop> -> 34 ]) - 34 -> ([ Assign: \result<loop> = j -> 35 ]) - 35 -> ([ LeaveScope: j -> 49 ]) - 49 -> ([ finalize_call: \result<loop> -> 50 ]) - 50 -> ([ Assign: tmp = \result<loop> -> 51 ]) - 51 -> ([ LeaveScope: \result<loop> -> 52 ]) - 52 -> ([ join -> 116 ]) - 53 -> ([ EnterScope: i -> 55 ]) - 55 -> ([ initialize variable: i -> 56 ]) - 56 -> ([ Assign: i = 0 -> 57 ]) - 57 -> ([ enter_loop -> 58 ]) - 58 -> ([ Assume: i < 3 true -> 59 ]) - 59 -> ([ Assign: j = j + 1 -> 60 ]) - 60 -> ([ Assign: i = i + 1 -> 61 ]) - 61 -> ([ incr_loop_counter -> 62 ]) - 62 -> ([ Assume: i < 3 true -> 64 ]) - 64 -> ([ Assign: j = j + 1 -> 65 ]) - 65 -> ([ Assign: i = i + 1 -> 66 ]) - 66 -> ([ incr_loop_counter -> 68 ]) - 68 -> ([ Assume: i < 3 true -> 70 ]) - 70 -> ([ Assign: j = j + 1 -> 71 ]) - 71 -> ([ Assign: i = i + 1 -> 72 ]) - 72 -> ([ incr_loop_counter -> 74 ]) - 74 -> ([ Assume: i < 3 false -> 76 ]) - 76 -> ([ leave_loop -> 77 ]) - 77 -> ([ LeaveScope: i -> 78 ]) - 78 -> ([ EnterScope: \result<loop> -> 79 ]) - 79 -> ([ Assign: \result<loop> = j -> 80 ]) - 80 -> ([ LeaveScope: j -> 112 ]) - 112 -> ([ finalize_call: \result<loop> -> 113 ]) - 113 -> ([ Assign: tmp = \result<loop> -> 114 ]) - 114 -> ([ LeaveScope: \result<loop> -> 115 ]) - 115 -> ([ join -> 116 ]) ]} - current: 116] + 7 -> ([ start_call: loop -> 9 ]) + 8 -> ([ start_call: loop -> 55 ]) + 9 -> ([ EnterScope: j -> 10 ]) + 10 -> ([ Assign: j = tmp -> 11 ]) + 11 -> ([ EnterScope: i -> 12 ]) + 12 -> ([ initialize variable: i -> 13 ]) + 13 -> ([ Assign: i = 0 -> 14 ]) + 14 -> ([ enter_loop -> 15 ]) + 15 -> ([ Assume: i < 3 true -> 16 ]) + 16 -> ([ Assign: j = j + 1 -> 17 ]) + 17 -> ([ Assign: i = i + 1 -> 18 ]) + 18 -> ([ incr_loop_counter -> 19 ]) + 19 -> ([ Assume: i < 3 true -> 21 ]) + 21 -> ([ Assign: j = j + 1 -> 22 ]) + 22 -> ([ Assign: i = i + 1 -> 23 ]) + 23 -> ([ incr_loop_counter -> 25 ]) + 25 -> ([ Assume: i < 3 true -> 27 ]) + 27 -> ([ Assign: j = j + 1 -> 28 ]) + 28 -> ([ Assign: i = i + 1 -> 29 ]) + 29 -> ([ incr_loop_counter -> 31 ]) + 31 -> ([ Assume: i < 3 false -> 33 ]) + 33 -> ([ leave_loop -> 34 ]) + 34 -> ([ LeaveScope: i -> 35 ]) + 35 -> ([ EnterScope: \result<loop> -> 36 ]) + 36 -> ([ Assign: \result<loop> = j -> 37 ]) + 37 -> ([ LeaveScope: j -> 51 ]) + 51 -> ([ finalize_call: loop -> 52 ]) + 52 -> ([ Assign: tmp = \result<loop> -> 53 ]) + 53 -> ([ LeaveScope: \result<loop> -> 54 ]) + 54 -> ([ join -> 120 ]) + 55 -> ([ EnterScope: j -> 56 ]) + 56 -> ([ Assign: j = tmp -> 57 ]) + 57 -> ([ EnterScope: i -> 59 ]) + 59 -> ([ initialize variable: i -> 60 ]) + 60 -> ([ Assign: i = 0 -> 61 ]) + 61 -> ([ enter_loop -> 62 ]) + 62 -> ([ Assume: i < 3 true -> 63 ]) + 63 -> ([ Assign: j = j + 1 -> 64 ]) + 64 -> ([ Assign: i = i + 1 -> 65 ]) + 65 -> ([ incr_loop_counter -> 66 ]) + 66 -> ([ Assume: i < 3 true -> 68 ]) + 68 -> ([ Assign: j = j + 1 -> 69 ]) + 69 -> ([ Assign: i = i + 1 -> 70 ]) + 70 -> ([ incr_loop_counter -> 72 ]) + 72 -> ([ Assume: i < 3 true -> 74 ]) + 74 -> ([ Assign: j = j + 1 -> 75 ]) + 75 -> ([ Assign: i = i + 1 -> 76 ]) + 76 -> ([ incr_loop_counter -> 78 ]) + 78 -> ([ Assume: i < 3 false -> 80 ]) + 80 -> ([ leave_loop -> 81 ]) + 81 -> ([ LeaveScope: i -> 82 ]) + 82 -> ([ EnterScope: \result<loop> -> 83 ]) + 83 -> ([ Assign: \result<loop> = j -> 84 ]) + 84 -> ([ LeaveScope: j -> 116 ]) + 116 -> ([ finalize_call: loop -> 117 ]) + 117 -> ([ Assign: tmp = \result<loop> -> 118 ]) + 118 -> ([ LeaveScope: \result<loop> -> 119 ]) + 119 -> ([ join -> 120 ]) ]} + current: 120] ==END OF DUMP== [value] Recording results for main [value] done for function main