From 4439652f6a89d8526c712b9e3ab386ab7a1e5402 Mon Sep 17 00:00:00 2001 From: Boris Yakobowski <boris.yakobowski@cea.fr> Date: Sat, 20 Sep 2014 09:54:45 +0200 Subject: [PATCH] [Value] Optional warnings when the memcpy builtin copies indeterminate bits --- src/value/builtins_nonfree.ml | 6 ++++++ tests/misc/oracle/memcpy.res.oracle | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/value/builtins_nonfree.ml b/src/value/builtins_nonfree.ml index d37ad486d55..d8748b113ff 100644 --- a/src/value/builtins_nonfree.ml +++ b/src/value/builtins_nonfree.ml @@ -215,6 +215,12 @@ let frama_c_memcpy state actuals = Valarms.set_syntactic_context (Valarms.SyMemLogic array_src); Valarms.warn_mem_read with_alarms; end; + begin match v with + | V_Or_Uninitialized.C_init_noesc _ -> () + | _ -> Value_parameters.result ~dkey ~current:true ~once:true + "@[In memcpy@ builtin:@ imprecise@ copy of@ indeterminate@ values@]%t" + Value_util.pp_callstack + end; Valarms.set_syntactic_context (Valarms.SyMemLogic array_dst); let new_state = Eval_op.add_binding_unspecified ~with_alarms ~remove_invalid:true ~exact:false new_state loc_left v diff --git a/tests/misc/oracle/memcpy.res.oracle b/tests/misc/oracle/memcpy.res.oracle index 7bbc6bdf16e..5b8036a6926 100644 --- a/tests/misc/oracle/memcpy.res.oracle +++ b/tests/misc/oracle/memcpy.res.oracle @@ -174,6 +174,7 @@ tests/misc/memcpy.c:180:[value] Assertion got status valid. [value] Done for function make_unknown tests/misc/memcpy.c:174:[value] Call to builtin memcpy(({{ (char *)&b }},{{ (char const *)&a }},[0..25])) tests/misc/memcpy.c:174:[value:imprecision] In memcpy builtin: too many sizes to enumerate, possible loss of precision +tests/misc/memcpy.c:174:[value:imprecision] In memcpy builtin: imprecise copy of indeterminate values tests/misc/memcpy.c:187:[value] Call to builtin memcpy(({{ (char *)&b }},{{ (char const *)&a }},{10})) [value] computing for function itv <- main_uninit <- main_all. Called from tests/misc/memcpy.c:190. @@ -188,9 +189,11 @@ tests/misc/memcpy.c:175:[value] Assertion got status valid. tests/misc/memcpy.c:188:[value] Assertion got status valid. tests/misc/memcpy.c:190:[value] Call to builtin memcpy(({{ (char *)&b }},{{ (char const *)&a }},[0..25])) tests/misc/memcpy.c:190:[value:imprecision] In memcpy builtin: too many sizes to enumerate, possible loss of precision +tests/misc/memcpy.c:190:[value:imprecision] In memcpy builtin: imprecise copy of indeterminate values tests/misc/memcpy.c:198:[value] Call to builtin memcpy(({{ (char *)&b }},{{ (char const *)&a }},{10})) tests/misc/memcpy.c:181:[value] Call to builtin memcpy(({{ (char *)&b }},{{ (char const *)&a }},[0..25])) tests/misc/memcpy.c:181:[value:imprecision] In memcpy builtin: too many sizes to enumerate, possible loss of precision +tests/misc/memcpy.c:181:[value:imprecision] In memcpy builtin: imprecise copy of indeterminate values tests/misc/memcpy.c:191:[value] Assertion got status valid. tests/misc/memcpy.c:199:[value] Assertion got status valid. tests/misc/memcpy.c:182:[kernel] warning: accessing uninitialized left-value: assert \initialized(&b[11]); @@ -200,6 +203,7 @@ tests/misc/memcpy.c:192:[kernel] warning: accessing uninitialized left-value: as [value] Done for function itv tests/misc/memcpy.c:200:[value] Call to builtin memcpy(({{ (char *)&b }},{{ (char const *)&a }},[0..25])) tests/misc/memcpy.c:200:[value:imprecision] In memcpy builtin: too many sizes to enumerate, possible loss of precision +tests/misc/memcpy.c:200:[value:imprecision] In memcpy builtin: imprecise copy of indeterminate values tests/misc/memcpy.c:201:[kernel] warning: accessing uninitialized left-value: assert \initialized(&b[11]); [value] Recording results for main_uninit [from] Computing for function main_uninit -- GitLab