From 82778eeddecac0d255aaed7a6925e56f2c273326 Mon Sep 17 00:00:00 2001 From: Daiva Naudziuniene Date: Thu, 12 Nov 2020 01:43:32 -0800 Subject: [PATCH] [bug hash] Location independent procname Summary: In cpp, lambda's operator() name includes line and column numbers which were not ignore in proc name when computing bug hash. Reviewed By: ngorogiannis Differential Revision: D24890545 fbshipit-source-id: 95e6735f3 --- infer/src/integration/JsonReports.ml | 42 +++++++++++++++++----------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/infer/src/integration/JsonReports.ml b/infer/src/integration/JsonReports.ml index 005359304..87eab71b9 100644 --- a/infer/src/integration/JsonReports.ml +++ b/infer/src/integration/JsonReports.ml @@ -28,23 +28,31 @@ let compute_key (bug_type : string) (proc_name : Procname.t) (filename : string) String.concat ~sep:"|" [base_filename; simple_procedure_name; bug_type] -let compute_hash ~(severity : string) ~(bug_type : string) ~(proc_name : Procname.t) - ~(file : string) ~(qualifier : string) = - let base_filename = Filename.basename file in - let hashable_procedure_name = Procname.hashable_name proc_name in - let location_independent_qualifier = - (* Removing the line,column, line and column in lambda's name - (e.g. test::lambda.cpp:10:15::operator()), - and infer temporary variable (e.g., n$67) information from the - error message as well as the index of the annonymmous class to make the hash invariant - when moving the source code in the file *) - Str.global_replace - (Str.regexp "\\(line \\|column \\|:\\|parameter \\|\\$\\)[0-9]+") - "$_" qualifier - in - Utils.better_hash - (severity, bug_type, hashable_procedure_name, base_filename, location_independent_qualifier) - |> Caml.Digest.to_hex +let compute_hash = + let num_regexp = Re.Str.regexp "\\(:\\)[0-9]+" in + let qualifier_regexp = Re.Str.regexp "\\(line \\|column \\|:\\|parameter \\|\\$\\)[0-9]+" in + fun ~(severity : string) ~(bug_type : string) ~(proc_name : Procname.t) ~(file : string) + ~(qualifier : string) -> + let base_filename = Filename.basename file in + let hashable_procedure_name = Procname.hashable_name proc_name in + let location_independent_proc_name = + Re.Str.global_replace num_regexp "$_" hashable_procedure_name + in + let location_independent_qualifier = + (* Removing the line,column, line and column in lambda's name + (e.g. test::lambda.cpp:10:15::operator()), + and infer temporary variable (e.g., n$67) information from the + error message as well as the index of the annonymmous class to make the hash invariant + when moving the source code in the file *) + Re.Str.global_replace qualifier_regexp "$_" qualifier + in + Utils.better_hash + ( severity + , bug_type + , location_independent_proc_name + , base_filename + , location_independent_qualifier ) + |> Caml.Digest.to_hex let loc_trace_to_jsonbug_record trace_list ekind =