diff --git a/src/plugins/value/domains/numerors/numerors_domain.ml b/src/plugins/value/domains/numerors/numerors_domain.ml index cafa9a5f1da9f06c0be6fedbffbec0f6e4117543..bc5a6c74469b1fedb830132f43f28c5e83e39ca2 100644 --- a/src/plugins/value/domains/numerors/numerors_domain.ml +++ b/src/plugins/value/domains/numerors/numerors_domain.ml @@ -87,9 +87,9 @@ module Domain = struct let post_analysis f = match f, Value_parameters.NumerorsLogFile.get () with - | _, s when s = "" -> () + | _, s when Filepath.Normalized.is_unknown s -> () | `Value _, s -> - let log = open_out s in + let log = open_out (s:>string) in let fmt = Format.formatter_of_out_channel log in List.iter (fun f -> f fmt ()) !Numerors_Value.dprint_callstack ; close_out log diff --git a/src/plugins/value/domains/traces_domain.ml b/src/plugins/value/domains/traces_domain.ml index ce718b03ee17ad5b2c30afd9a4d08658f3b5f7ee..408114d15682d5121126bb154111f216bf67c8f6 100644 --- a/src/plugins/value/domains/traces_domain.ml +++ b/src/plugins/value/domains/traces_domain.ml @@ -1278,7 +1278,7 @@ module D = struct Value_parameters.failure "The trace is TOP can't generate code" | `Value state -> if not (Value_parameters.TracesDot.is_default ()) - then output_dot (Value_parameters.TracesDot.get ()) state; + then output_dot (Value_parameters.TracesDot.get ():>string) state; if Value_parameters.TracesProject.get () then project_of_cfg return_exp state end diff --git a/src/plugins/value/utils/red_statuses.ml b/src/plugins/value/utils/red_statuses.ml index 8657a9dae7c99b77cd9bb5e7c11f0b9d33a708bb..550a23adc1628036ef446d3dd056403934d6d300 100644 --- a/src/plugins/value/utils/red_statuses.ml +++ b/src/plugins/value/utils/red_statuses.ml @@ -175,8 +175,9 @@ let print_information fmt { loc; kf; alarm; kind; text; status; contexts } = dir file lnum kf alarm kind contexts status text let output file = - Value_parameters.feedback "Listing red statuses in file %s" file; - let channel = open_out file in + Value_parameters.feedback "Listing red statuses in file %a" + Filepath.Normalized.pretty file; + let channel = open_out (file:>string) in let fmt = Format.formatter_of_out_channel channel in Format.pp_set_margin fmt 1000000; Format.fprintf fmt "@[<v>"; @@ -190,4 +191,4 @@ let output file = let report () = let file = Value_parameters.ReportRedStatuses.get () in - if file <> "" then output file + if not (Filepath.Normalized.is_unknown file) then output file diff --git a/src/plugins/value/utils/value_perf.ml b/src/plugins/value/utils/value_perf.ml index e8f0be51619f58a5a7003874680638b01b43d8a4..5d310a3baca88f6d98b4e89edf44a1b55667fb14 100644 --- a/src/plugins/value/utils/value_perf.ml +++ b/src/plugins/value/utils/value_perf.ml @@ -396,10 +396,10 @@ let start_doing_flamegraph callstack = | [_] -> (* Analysis of main *) let file = Value_parameters.ValPerfFlamegraphs.get () in - if file <> "" then begin + if not (Filepath.Normalized.is_unknown file) then begin try (* Flamegraphs must be computed. Set up the stack and the output file *) - let oc = open_out file in + let oc = open_out (file:>string) in oc_flamegraph := Some oc; stack_flamegraph := [ (Sys.time (), 0.) ] with e -> diff --git a/src/plugins/value/value_parameters.ml b/src/plugins/value/value_parameters.ml index ec4e77fd3ed01fec6b323a0129a6a1f580db8bd0..494a55fc98f21b9986e5d52116d7f3aacecf67aa 100644 --- a/src/plugins/value/value_parameters.ml +++ b/src/plugins/value/value_parameters.ml @@ -351,11 +351,13 @@ module TracesUnifyLoop = let () = add_precision_dep TracesUnifyLoop.parameter let () = Parameter_customize.set_group domains -module TracesDot = Empty_string +module TracesDot = Filepath (struct let option_name = "-eva-traces-dot" - let help = "Output to the given filename the Cfg in dot format." let arg_name = "FILENAME" + let file_kind = "DOT" + let existence = Fc_Filepath.Indifferent + let help = "Output to the given filename the Cfg in dot format." end) let () = Parameter_customize.set_group domains @@ -1070,14 +1072,15 @@ module ValShowPerf = let () = Parameter_customize.set_group messages module ValPerfFlamegraphs = - String + Filepath (struct let option_name = "-eva-flamegraph" + let arg_name = "file" + let file_kind = "Text for flamegraph" + let existence = Fc_Filepath.Indifferent let help = "Dump a summary of the time spent analyzing function calls \ in a format suitable for the Flamegraph tool \ (http://www.brendangregg.com/flamegraphs.html)" - let arg_name = "file" - let default = "" end) @@ -1103,11 +1106,12 @@ module PrintCallstacks = let () = Parameter_customize.set_group messages module ReportRedStatuses = - String + Filepath (struct let option_name = "-eva-report-red-statuses" let arg_name = "filename" - let default = "" + let file_kind = "CSV" + let existence = Fc_Filepath.Indifferent let help = "Output the list of \"red properties\" in a csv file of the \ given name. These are the properties which were invalid for \ some states. Their consolidated status may not be invalid, \ @@ -1116,13 +1120,14 @@ module ReportRedStatuses = let () = Parameter_customize.set_group messages module NumerorsLogFile = - String + Filepath (struct let option_name = "-eva-numerors-log-file" + let arg_name = "file" + let file_kind = "Text" + let existence = Fc_Filepath.Indifferent let help = "The Numerors domain will save each call to the DPRINT \ function in the given file" - let arg_name = "file" - let default = "" end) (* ------------------------------------------------------------------------- *) diff --git a/src/plugins/value/value_parameters.mli b/src/plugins/value/value_parameters.mli index 3f50d6efaa7990c3c68289b0043e4259bab34ba0..9a6a7172cc20cf89b2a178a6bf40c59cf1e91779 100644 --- a/src/plugins/value/value_parameters.mli +++ b/src/plugins/value/value_parameters.mli @@ -42,7 +42,7 @@ module OctagonCall: Parameter_sig.Bool module TracesUnrollLoop: Parameter_sig.Bool module TracesUnifyLoop: Parameter_sig.Bool -module TracesDot: Parameter_sig.String +module TracesDot: Parameter_sig.Filepath module TracesProject: Parameter_sig.Bool module EqualityStorage: Parameter_sig.Bool @@ -122,11 +122,11 @@ module SplitGlobalStrategy: State_builder.Ref with type data = Split_strategy.t module ValShowProgress: Parameter_sig.Bool module ValShowPerf: Parameter_sig.Bool -module ValPerfFlamegraphs: Parameter_sig.String +module ValPerfFlamegraphs: Parameter_sig.Filepath module ShowSlevel: Parameter_sig.Int module PrintCallstacks: Parameter_sig.Bool -module ReportRedStatuses: Parameter_sig.String -module NumerorsLogFile: Parameter_sig.String +module ReportRedStatuses: Parameter_sig.Filepath +module NumerorsLogFile: Parameter_sig.Filepath module MemExecAll: Parameter_sig.Bool