|  |  |  | @ -372,44 +372,6 @@ let pp_text_of_report fmt report = | 
			
		
	
		
			
				
					|  |  |  |  |   List.iter ~f:pp_row report ; F.fprintf fmt "@?" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | (** Categorize the preconditions of specs and print stats *) | 
			
		
	
		
			
				
					|  |  |  |  | module PreconditionStats = struct | 
			
		
	
		
			
				
					|  |  |  |  |   let nr_nopres = ref 0 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   let nr_empty = ref 0 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   let nr_onlyallocation = ref 0 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   let nr_dataconstraints = ref 0 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   let do_summary proc_name summary = | 
			
		
	
		
			
				
					|  |  |  |  |     let specs = Tabulation.get_specs_from_payload summary in | 
			
		
	
		
			
				
					|  |  |  |  |     let preconditions = | 
			
		
	
		
			
				
					|  |  |  |  |       List.map ~f:(fun spec -> BiabductionSummary.Jprop.to_prop spec.BiabductionSummary.pre) specs | 
			
		
	
		
			
				
					|  |  |  |  |     in | 
			
		
	
		
			
				
					|  |  |  |  |     match Prop.CategorizePreconditions.categorize preconditions with | 
			
		
	
		
			
				
					|  |  |  |  |     | Prop.CategorizePreconditions.Empty -> | 
			
		
	
		
			
				
					|  |  |  |  |         incr nr_empty ; | 
			
		
	
		
			
				
					|  |  |  |  |         L.result "Procedure: %a footprint:Empty@." Procname.pp proc_name | 
			
		
	
		
			
				
					|  |  |  |  |     | Prop.CategorizePreconditions.OnlyAllocation -> | 
			
		
	
		
			
				
					|  |  |  |  |         incr nr_onlyallocation ; | 
			
		
	
		
			
				
					|  |  |  |  |         L.result "Procedure: %a footprint:OnlyAllocation@." Procname.pp proc_name | 
			
		
	
		
			
				
					|  |  |  |  |     | Prop.CategorizePreconditions.NoPres -> | 
			
		
	
		
			
				
					|  |  |  |  |         incr nr_nopres ; | 
			
		
	
		
			
				
					|  |  |  |  |         L.result "Procedure: %a footprint:NoPres@." Procname.pp proc_name | 
			
		
	
		
			
				
					|  |  |  |  |     | Prop.CategorizePreconditions.DataConstraints -> | 
			
		
	
		
			
				
					|  |  |  |  |         incr nr_dataconstraints ; | 
			
		
	
		
			
				
					|  |  |  |  |         L.result "Procedure: %a footprint:DataConstraints@." Procname.pp proc_name | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   let pp_stats () = | 
			
		
	
		
			
				
					|  |  |  |  |     L.result "@.Precondition stats@." ; | 
			
		
	
		
			
				
					|  |  |  |  |     L.result "Procedures with no preconditions: %d@." !nr_nopres ; | 
			
		
	
		
			
				
					|  |  |  |  |     L.result "Procedures with empty precondition: %d@." !nr_empty ; | 
			
		
	
		
			
				
					|  |  |  |  |     L.result "Procedures with only allocation conditions: %d@." !nr_onlyallocation ; | 
			
		
	
		
			
				
					|  |  |  |  |     L.result "Procedures with data constraints: %d@." !nr_dataconstraints | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | module SummaryStats = struct | 
			
		
	
		
			
				
					|  |  |  |  |   module MetricTypes = struct | 
			
		
	
		
			
				
					|  |  |  |  |     type 't typ = Bool : bool typ | Int : int typ | 
			
		
	
	
		
			
				
					|  |  |  | @ -724,7 +686,6 @@ let pp_lint_issues filters formats_by_report_kind linereader procname error_log | 
			
		
	
		
			
				
					|  |  |  |  | let process_summary formats_by_report_kind summary issues_acc = | 
			
		
	
		
			
				
					|  |  |  |  |   let proc_name = Summary.get_proc_name summary in | 
			
		
	
		
			
				
					|  |  |  |  |   let issues_acc' = pp_summary_by_report_kind formats_by_report_kind summary issues_acc in | 
			
		
	
		
			
				
					|  |  |  |  |   if Config.precondition_stats then PreconditionStats.do_summary proc_name summary ; | 
			
		
	
		
			
				
					|  |  |  |  |   if Config.summary_stats then SummaryStats.do_summary proc_name summary ; | 
			
		
	
		
			
				
					|  |  |  |  |   issues_acc' | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -797,7 +758,6 @@ let pp_summary_and_issues formats_by_report_kind issue_formats = | 
			
		
	
		
			
				
					|  |  |  |  |         ~f:(fun issue_format -> pp_issue_in_format issue_format error_filter issue) | 
			
		
	
		
			
				
					|  |  |  |  |         issue_formats ) | 
			
		
	
		
			
				
					|  |  |  |  |     !all_issues ; | 
			
		
	
		
			
				
					|  |  |  |  |   if Config.precondition_stats then PreconditionStats.pp_stats () ; | 
			
		
	
		
			
				
					|  |  |  |  |   if Config.summary_stats then SummaryStats.pp_stats () ; | 
			
		
	
		
			
				
					|  |  |  |  |   (* Issues that are generated and stored outside of summaries by linter and checkers *) | 
			
		
	
		
			
				
					|  |  |  |  |   List.iter (Config.lint_issues_dir_name :: FileLevelAnalysisIssueDirs.get_registered_dir_names ()) | 
			
		
	
	
		
			
				
					|  |  |  | 
 |