[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
master
Daiva Naudziuniene 4 years ago committed by Facebook GitHub Bot
parent 0eb686aad4
commit 82778eedde

@ -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 =

Loading…
Cancel
Save