From 7da9dcffc2f983cbb1811e512d9d37e67477b7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Sat, 15 Jan 2022 22:49:54 +0100 Subject: [PATCH] [Eva] Do not crash when the inout plugin is missing. Warns at the start of an analysis when the inout plugin is missing. --- src/plugins/value/domains/cvalue/cvalue_domain.ml | 4 +++- src/plugins/value/engine/compute_functions.ml | 7 +++++++ tests/value/oracle/unknown_sizeof.0.res.oracle | 1 + tests/value/oracle/unknown_sizeof.1.res.oracle | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/plugins/value/domains/cvalue/cvalue_domain.ml b/src/plugins/value/domains/cvalue/cvalue_domain.ml index 57dd8ab350c..cd9f4376d4e 100644 --- a/src/plugins/value/domains/cvalue/cvalue_domain.ml +++ b/src/plugins/value/domains/cvalue/cvalue_domain.ml @@ -563,7 +563,9 @@ module State = struct Value_parameters.result "%t" Value_perf.display let post_analysis _state = - if Value_parameters.ForceValues.get () && Value_parameters.verbose_atleast 1 + if Value_parameters.ForceValues.get () + && Value_parameters.verbose_atleast 1 + && Plugin.is_present "inout" then Value_parameters.ForceValues.output display_results end diff --git a/src/plugins/value/engine/compute_functions.ml b/src/plugins/value/engine/compute_functions.ml index e294447de66..89f505305e4 100644 --- a/src/plugins/value/engine/compute_functions.ml +++ b/src/plugins/value/engine/compute_functions.ml @@ -54,6 +54,12 @@ let options_ok () = Value_parameters.BuiltinsOverrides.iter (fun (kf, _) -> check_assigns kf); Value_parameters.UsePrototype.iter (fun kf -> check_assigns kf) +let plugins_ok () = + if not (Plugin.is_present "inout") then + Value_parameters.warning + "The inout plugin is missing: some features are disabled, \ + and the analysis may have degraded precision and performance." + (* Do something tasteless in case the user did not put a spec on functions for which he set [-eva-use-spec]: generate an incorrect one ourselves *) let generate_specs () = @@ -73,6 +79,7 @@ let generate_specs () = let pre_analysis () = floats_ok (); options_ok (); + plugins_ok (); Split_return.pretty_strategies (); generate_specs (); Widen.precompute_widen_hints (); diff --git a/tests/value/oracle/unknown_sizeof.0.res.oracle b/tests/value/oracle/unknown_sizeof.0.res.oracle index b106b41c0ed..4244ff0a82b 100644 --- a/tests/value/oracle/unknown_sizeof.0.res.oracle +++ b/tests/value/oracle/unknown_sizeof.0.res.oracle @@ -1,4 +1,5 @@ [kernel] Parsing unknown_sizeof.i (no preprocessing) +[eva] Warning: The inout plugin is missing: some features are disabled, and the analysis may have degraded precision and performance. [eva] Analyzing a complete application starting at main1 [eva] Computing initial state [eva:unknown-size] unknown_sizeof.i:8: Warning: diff --git a/tests/value/oracle/unknown_sizeof.1.res.oracle b/tests/value/oracle/unknown_sizeof.1.res.oracle index 52d022abfce..fd9e82d2f78 100644 --- a/tests/value/oracle/unknown_sizeof.1.res.oracle +++ b/tests/value/oracle/unknown_sizeof.1.res.oracle @@ -1,4 +1,5 @@ [kernel] Parsing unknown_sizeof.i (no preprocessing) +[eva] Warning: The inout plugin is missing: some features are disabled, and the analysis may have degraded precision and performance. [eva] Analyzing a complete application starting at main2 [eva] Computing initial state [eva:unknown-size] unknown_sizeof.i:8: Warning: -- GitLab