@ -475,7 +475,7 @@ end = struct
 
			
		
	
		
			
				
					  type  report_t  = 
 
			
		
	
		
			
				
					    { issue_type :  IssueType . t ;  pname :  Procname . t ;  depth :  int ;  ltr :  Errlog . loc_trace ;  message :  string } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  type  t  =  report_t  list  . Map . t 
 
			
		
	
		
			
				
					  type  t  =  report_t  list  IssueType. Map . t   Location. Map . t 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  type  report_add_t  = 
 
			
		
	
		
			
				
					    Tenv . t  ->  ProcAttributes . t  ->  Location . t  ->  Errlog . loc_trace  ->  string  ->  t  ->  t 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -488,7 +488,14 @@ end = struct
 
			
		
	
		
			
				
					      let  pname  =  ProcAttributes . get_proc_name  pattrs  in 
 
			
		
	
		
			
				
					      let  report  =  { issue_type ;  pname ;  ltr ;  message ;  depth =  - List . length  ltr }  in 
 
			
		
	
		
			
				
					      Location . Map . update  loc 
 
			
		
	
		
			
				
					        ( fun  reports_opt  ->  Some  ( report  ::  Option . value  reports_opt  ~ default : [] ) ) 
 
			
		
	
		
			
				
					        ( fun  issue_map_opt  -> 
 
			
		
	
		
			
				
					          let  issue_map  =  Option . value  issue_map_opt  ~ default : IssueType . Map . empty  in 
 
			
		
	
		
			
				
					          IssueType . Map . update  issue_type 
 
			
		
	
		
			
				
					            ( fun  reports_opt  -> 
 
			
		
	
		
			
				
					              let  reports  =  Option . value  reports_opt  ~ default : []  in 
 
			
		
	
		
			
				
					              Some  ( report  ::  reports )  ) 
 
			
		
	
		
			
				
					            issue_map 
 
			
		
	
		
			
				
					          | >  Option . some  ) 
 
			
		
	
		
			
				
					        loc_map 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -512,6 +519,15 @@ end = struct
 
			
		
	
		
			
				
					    add  tenv  pattrs  loc  ltr  message  IssueType . arbitrary_code_execution_under_lock  map 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  let  deduplicated_issue_order  = 
 
			
		
	
		
			
				
					    IssueType . 
 
			
		
	
		
			
				
					      [  deadlock 
 
			
		
	
		
			
				
					      ;  lockless_violation 
 
			
		
	
		
			
				
					      ;  starvation 
 
			
		
	
		
			
				
					      ;  strict_mode_violation 
 
			
		
	
		
			
				
					      ;  arbitrary_code_execution_under_lock  ] 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  let  issue_log_of  loc_map  = 
 
			
		
	
		
			
				
					    let  log_report  loc  issue_log  { issue_type ;  pname ;  ltr ;  message }  = 
 
			
		
	
		
			
				
					      Reporting . log_issue_external  ~ issue_log  pname  ~ loc  ~ ltr  Starvation  issue_type  message 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -528,7 +544,8 @@ end = struct
 
			
		
	
		
			
				
					      |  result  -> 
 
			
		
	
		
			
				
					          result 
 
			
		
	
		
			
				
					    in 
 
			
		
	
		
			
				
					    let  log_reports  loc  reports  issue_log  = 
 
			
		
	
		
			
				
					    let  log_reports  loc  issue_map  issue_log  issue  = 
 
			
		
	
		
			
				
					      let  reports  =  IssueType . Map . find_opt  issue  issue_map  | >  Option . value  ~ default : []  in 
 
			
		
	
		
			
				
					      if  Config . deduplicate  then 
 
			
		
	
		
			
				
					        let  rep_opt  = 
 
			
		
	
		
			
				
					          match  reports  with 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -542,24 +559,8 @@ end = struct
 
			
		
	
		
			
				
					        Option . fold  rep_opt  ~ init : issue_log  ~ f : ( log_report  loc ) 
 
			
		
	
		
			
				
					      else  List . fold  reports  ~ init : issue_log  ~ f : ( log_report  loc ) 
 
			
		
	
		
			
				
					    in 
 
			
		
	
		
			
				
					    let  filter_issue  issue_to_filter  { issue_type }  =  IssueType . equal  issue_type  issue_to_filter  in 
 
			
		
	
		
			
				
					    let  log_location  loc  problems  issue_log  = 
 
			
		
	
		
			
				
					      let  deadlocks  =  List . filter  problems  ~ f : ( filter_issue  IssueType . deadlock )  in 
 
			
		
	
		
			
				
					      let  starvations  =  List . filter  problems  ~ f : ( filter_issue  IssueType . starvation )  in 
 
			
		
	
		
			
				
					      let  strict_mode_violations  = 
 
			
		
	
		
			
				
					        List . filter  problems  ~ f : ( filter_issue  IssueType . strict_mode_violation ) 
 
			
		
	
		
			
				
					      in 
 
			
		
	
		
			
				
					      let  lockless_violations  = 
 
			
		
	
		
			
				
					        List . filter  problems  ~ f : ( filter_issue  IssueType . lockless_violation ) 
 
			
		
	
		
			
				
					      in 
 
			
		
	
		
			
				
					      let  arbitrary_code_executions_under_lock  = 
 
			
		
	
		
			
				
					        List . filter  problems  ~ f : ( filter_issue  IssueType . arbitrary_code_execution_under_lock ) 
 
			
		
	
		
			
				
					      in 
 
			
		
	
		
			
				
					      log_reports  loc  deadlocks  issue_log 
 
			
		
	
		
			
				
					      | >  log_reports  loc  lockless_violations 
 
			
		
	
		
			
				
					      | >  log_reports  loc  starvations 
 
			
		
	
		
			
				
					      | >  log_reports  loc  strict_mode_violations 
 
			
		
	
		
			
				
					      | >  log_reports  loc  arbitrary_code_executions_under_lock 
 
			
		
	
		
			
				
					    let  log_location  loc  issue_map  issue_log  = 
 
			
		
	
		
			
				
					      List . fold  deduplicated_issue_order  ~ init : issue_log  ~ f : ( log_reports  loc  issue_map ) 
 
			
		
	
		
			
				
					    in 
 
			
		
	
		
			
				
					    Location . Map . fold  log_location  loc_map  IssueLog . empty