Skip to content

Commit cebce0e

Browse files
committed
CHC: add diagnostics for memory variables
1 parent a0bac48 commit cebce0e

6 files changed

Lines changed: 91 additions & 10 deletions

File tree

CodeHawk/CHC/cchanalyze/cCHCallTranslator.ml

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,6 +1261,13 @@ object (self)
12611261
(fname:string) (args:exp list) (_fnargs:xpr_t list) =
12621262
let (pcs, _epcs) =
12631263
get_postconditions env#get_functionname (Some fname) context in
1264+
let _ =
1265+
log_diagnostics_result
1266+
~tag:"sym:get_postconditions"
1267+
~msg:env#get_functionname
1268+
__FILE__ __LINE__
1269+
["pcs: " ^
1270+
(String.concat ", " (List.map annotated_xpredicate_to_string pcs))] in
12641271
List.concat
12651272
(List.map (fun (pc, _) ->
12661273
match pc with
@@ -1334,6 +1341,13 @@ object (self)
13341341
(fnargs:xpr_t list) =
13351342
let vinfo = fdecls#get_varinfo_by_vid fvid in
13361343
let sideeffects = get_sideeffects env#get_functionname (Some fname) context in
1344+
let _ =
1345+
log_diagnostics_result
1346+
~tag:"get_sideeffect:sym"
1347+
~msg:env#get_functionname
1348+
__FILE__ __LINE__
1349+
["side effects: " ^
1350+
(String.concat ", " (List.map annotated_xpredicate_to_string sideeffects))] in
13371351
let (sitevars,xsitevars) = env#get_site_call_vars context in
13381352
let fnzargs = List.map (fun _ -> None) fnargs in
13391353
let zsevar =
@@ -1508,9 +1522,25 @@ object (self)
15081522
| CastE (_, Lval (Var (_vname,vid), offset)) ->
15091523
let vinfo = env#get_varinfo vid in
15101524
Some (env#mk_program_var vinfo offset SYM_VAR_TYPE)
1511-
| _ -> None
1525+
| _ ->
1526+
begin
1527+
log_diagnostics_result
1528+
~tag:"get_sideeffect:sym:initialized-range"
1529+
~msg:env#get_functionname
1530+
__FILE__ __LINE__
1531+
["no base variable found for " ^ (p2s (s_term_to_pretty base))];
1532+
None
1533+
end
15121534
end
1513-
| _ -> None in
1535+
| _ ->
1536+
begin
1537+
log_diagnostics_result
1538+
~tag:"get_sideeffect:sym:initialized-range"
1539+
~msg:env#get_functionname
1540+
__FILE__ __LINE__
1541+
["base term not recognized: " ^ (p2s (s_term_to_pretty base))];
1542+
None
1543+
end in
15141544
let lenvalue =
15151545
match len with
15161546
| ArgValue (ParFormal n, ArgNoOffset) ->

CodeHawk/CHC/cchanalyze/cCHExtractInvariantFacts.ml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ open CCHNumericalConstraints
6363
module H = Hashtbl
6464

6565

66+
let p2s = CHPrettyUtil.pretty_to_string
67+
68+
6669
exception TimeOut of float
6770

6871

@@ -530,7 +533,7 @@ let extract_valuesets
530533

531534

532535
let extract_symbols
533-
(_env:c_environment_int)
536+
(env:c_environment_int)
534537
(invio:invariant_io_int)
535538
(invariants:(string, (string,atlas_t) H.t) H.t) =
536539
try
@@ -539,6 +542,15 @@ let extract_symbols
539542
let inv = H.find v symbolic_sets_domain in
540543
let context = get_context k in
541544
let facts = extract_symbol_facts symbolic_sets_domain inv in
545+
let _ =
546+
log_diagnostics_result
547+
~tag:"extract_symbols"
548+
~msg:env#get_functionname
549+
__FILE__ __LINE__
550+
["facts: " ^
551+
(String.concat ", "
552+
(List.map (fun f ->
553+
(p2s (invariant_fact_to_pretty f))) facts))] in
542554
List.iter (fun f -> invio#add_fact context f) facts) invariants
543555
with
544556
| CCHFailure p ->

CodeHawk/CHC/cchanalyze/cCHOperationsProvider.ml

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ open CCHCommand
5959
module H = Hashtbl
6060

6161
let x2p = xpr_formatter#pr_expr
62+
let p2s = CHPrettyUtil.pretty_to_string
63+
let x2s x = p2s (x2p x)
6264

6365

6466
module ProgramContextCollections = CHCollections.Make
@@ -190,14 +192,27 @@ object (self)
190192
[make_c_cmd SKIP]
191193
| _ ->
192194
match exp_translator#translate_exp context e with
193-
| XVar symvar -> [make_c_cmd (ASSIGN_SYM (v, SYM_VAR symvar))]
194-
| XConst _ -> [make_c_cmd SKIP]
195+
| XVar symvar ->
196+
let _ =
197+
log_diagnostics_result
198+
~tag:"make_context_operation:sym:symvar"
199+
~msg:env#get_functionname
200+
__FILE__ __LINE__
201+
["e: " ^ (p2s (exp_to_pretty e));
202+
"symvar: " ^ (p2s symvar#toPretty)] in
203+
[make_c_cmd (ASSIGN_SYM (v, SYM_VAR symvar))]
204+
| XConst _ ->
205+
[make_c_cmd SKIP]
195206
| xpr ->
196207
begin
197-
chlog#add "no symbolic check value assigned"
198-
(LBLOCK [STR env#get_functionname; STR ": ";
199-
exp_to_pretty e; STR " --> ";
200-
x2p xpr]);
208+
log_diagnostics_result
209+
~tag:"make_context_operation:sym"
210+
~msg:env#get_functionname
211+
__FILE__ __LINE__
212+
["no symbolic check value assigned for: " ^
213+
"e: " ^ (p2s (exp_to_pretty e));
214+
"translated to: " ^
215+
"xpr: " ^ (x2s xpr)];
201216
[make_c_cmd SKIP]
202217
end
203218
end

CodeHawk/CHC/cchanalyze/cCHPOCheckInitializedRange.ml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ open CHNumerical
3232
open CHPretty
3333

3434
(* chutil *)
35+
open CHLogger
3536
open CHPrettyUtil
3637

3738
(* xprlib *)
@@ -124,6 +125,17 @@ object (self)
124125

125126
method private get_initialization_length (vinfo: varinfo) =
126127
let vinfovalues = poq#get_vinfo_offset_values vinfo in
128+
let _ =
129+
log_diagnostics_result
130+
~tag:"get_initialization_length"
131+
~msg:poq#env#get_functionname
132+
__FILE__ __LINE__
133+
["vinfo: " ^ vinfo.vname;
134+
"vinfo-values: " ^
135+
(String.concat ", "
136+
(List.map (fun (inv, offset) ->
137+
"(" ^ (p2s inv#toPretty) ^ ", " ^ (p2s (offset_to_pretty offset)))
138+
vinfovalues))] in
127139
List.fold_left (fun acc (inv,offset) ->
128140
match acc with
129141
| Some _ -> acc

CodeHawk/CHC/cchpre/cCHInvariantFact.ml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,13 @@ object (self)
621621
else
622622
inv :: entry in
623623
H.replace table vindex newentry
624-
| _ -> ()
624+
| _ ->
625+
let _ =
626+
log_diagnostics_result
627+
~tag:"integrate_fact:ignored"
628+
__FILE__ __LINE__
629+
[p2s inv#toPretty] in
630+
()
625631

626632
method write_xml (node:xml_element_int) =
627633
let invs = List.sort Stdlib.compare (H.fold (fun k _ a -> k::a) facts []) in

CodeHawk/CHC/cchpre/cCHMemoryBase.ml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
============================================================================= *)
2929

3030
(* chlib *)
31+
open CHLanguage
3132
open CHPretty
3233

3334
(* cchpre *)
3435
open CCHPreTypes
3536

3637

38+
let p2s = CHPrettyUtil.pretty_to_string
39+
40+
3741
let memory_base_to_string (b:memory_base_t) =
3842
match b with
3943
| CNull i -> "NULL(" ^ (string_of_int i) ^ ")"
@@ -44,6 +48,8 @@ let memory_base_to_string (b:memory_base_t) =
4448
^ v#getName#getBaseName
4549
^ "_"
4650
^ (string_of_int v#getName#getSeqNumber)
51+
^ "_"
52+
^ (p2s (variable_type_to_pretty v#getType))
4753
| CGlobalAddress v -> "addrof_globalvar_" ^ v#getName#getBaseName
4854
| CBaseVar (v, nullattr) ->
4955
"addr_in_"

0 commit comments

Comments
 (0)