From 4d43f0e5d83dd7c4e3e0ee353779aa469317e6ab Mon Sep 17 00:00:00 2001 From: Andrzej Kotulski Date: Mon, 7 Nov 2016 08:39:35 -0800 Subject: [PATCH] [clang] Remove CLocation.curr_file Summary: curr_file is remnant of the past when we didn't have good location information coming from Clang_ast_t location. But it was fixed ~1 year ago. Reviewed By: jvillard Differential Revision: D4139750 fbshipit-source-id: 4ce7235 --- infer/src/clang/Capture.re | 1 - infer/src/clang/cFrontend_checkers_main.ml | 2 - infer/src/clang/cFrontend_decl.ml | 1 - infer/src/clang/cLocation.ml | 54 ++++------------------ infer/src/clang/cLocation.mli | 9 +--- infer/src/clang/cTrans.ml | 3 +- 6 files changed, 10 insertions(+), 60 deletions(-) diff --git a/infer/src/clang/Capture.re b/infer/src/clang/Capture.re index f7802eed6..ff790246b 100644 --- a/infer/src/clang/Capture.re +++ b/infer/src/clang/Capture.re @@ -47,7 +47,6 @@ let init_global_state_for_capture_and_linters source_file => { CommandLineOption.Clang (Some (Filename.basename (DB.source_file_to_string source_file))); register_perf_stats_report source_file; Config.curr_language := Config.Clang; - CLocation.curr_file := source_file; DB.Results_dir.init source_file; Clang_ast_main.reset_cache (); CFrontend_config.reset_global_state () diff --git a/infer/src/clang/cFrontend_checkers_main.ml b/infer/src/clang/cFrontend_checkers_main.ml index fc03d4e77..cd9220fa3 100644 --- a/infer/src/clang/cFrontend_checkers_main.ml +++ b/infer/src/clang/cFrontend_checkers_main.ml @@ -63,8 +63,6 @@ let rec do_frontend_checks_stmt (context:CLintersContext.context) stmt = and do_frontend_checks_decl (context: CLintersContext.context) decl = let open Clang_ast_t in - let info = Clang_ast_proj.get_decl_tuple decl in - CLocation.update_curr_file context.translation_unit_context info; let context' = (match decl with | FunctionDecl(_, _, _, fdi) diff --git a/infer/src/clang/cFrontend_decl.ml b/infer/src/clang/cFrontend_decl.ml index 49bcd1e19..ac28b9aae 100644 --- a/infer/src/clang/cFrontend_decl.ml +++ b/infer/src/clang/cFrontend_decl.ml @@ -140,7 +140,6 @@ struct let should_translate_decl trans_unit_ctx dec decl_trans_context = let info = Clang_ast_proj.get_decl_tuple dec in - CLocation.update_curr_file trans_unit_ctx info; let source_range = info.Clang_ast_t.di_source_range in let translate_when_used = match dec with | Clang_ast_t.FunctionDecl (_, name_info, _, _) diff --git a/infer/src/clang/cLocation.ml b/infer/src/clang/cLocation.ml index 2000cb870..7751683a6 100644 --- a/infer/src/clang/cLocation.ml +++ b/infer/src/clang/cLocation.ml @@ -11,10 +11,6 @@ open! Utils (** Module for function to retrieve the location (file, line, etc) of instructions *) -(** Inside the AST there may be code or type definitions from other files than the one passed as an - argument. That current file in the translation is saved in this variable. *) -let curr_file = ref DB.source_file_empty - let source_file_from_path path = if Filename.is_relative path then (failwithf @@ -26,44 +22,12 @@ let source_file_from_path path = Logging.err_debug "ERROR: %s should be a prefix of %s.@." Config.project_root path; DB.source_file_from_string path -let choose_sloc_to_update_curr_file trans_unit_ctx sloc1 sloc2 = - match sloc2.Clang_ast_t.sl_file with - | Some f when DB.inode_equal (source_file_from_path f) - trans_unit_ctx.CFrontend_config.source_file -> - sloc2 - | _ -> sloc1 - -let update_curr_file trans_unit_ctx di = - let loc_start, loc_end = di.Clang_ast_t.di_source_range in - let loc = choose_sloc_to_update_curr_file trans_unit_ctx loc_start loc_end in - match loc.Clang_ast_t.sl_file with - | Some f -> curr_file := source_file_from_path f - | None -> () - -let clang_to_sil_location trans_unit_ctx clang_loc procdesc_opt = - let line = match clang_loc.Clang_ast_t.sl_line with - | Some l -> l - | None -> -1 in - let col = match clang_loc.Clang_ast_t.sl_column with - | Some c -> c - | None -> -1 in - let file, nLOC = - match procdesc_opt with - | Some procdesc -> - let proc_loc = Cfg.Procdesc.get_loc procdesc in - if (DB.source_file_equal proc_loc.Location.file DB.source_file_empty) then - !curr_file, !Config.nLOC - else proc_loc.Location.file, proc_loc.Location.nLOC - | None -> - match clang_loc.Clang_ast_t.sl_file with - | Some f -> - let file_db = source_file_from_path f in - let nloc = - if (DB.inode_equal file_db trans_unit_ctx.CFrontend_config.source_file) then - !Config.nLOC - else -1 in - file_db, nloc - | None -> !curr_file, !Config.nLOC in +let clang_to_sil_location trans_unit_ctx clang_loc = + let line = Option.default (-1) clang_loc.Clang_ast_t.sl_line in + let col = Option.default (-1) clang_loc.Clang_ast_t.sl_column in + let file = Option.map_default source_file_from_path + trans_unit_ctx.CFrontend_config.source_file clang_loc.Clang_ast_t.sl_file in + let nLOC = -1 in Location.{line; col; file; nLOC} let file_in_project file = @@ -108,8 +72,7 @@ let should_translate trans_unit_ctx (loc_start, loc_end) decl_trans_context ~tra let translate_on_demand = translate_when_used || file_in_project || Config.models_mode in let file_in_models = map_path_of DB.file_is_in_cpp_model loc_end || map_path_of DB.file_is_in_cpp_model loc_start in - equal_current_source !curr_file - || map_file_of equal_current_source loc_end + map_file_of equal_current_source loc_end || map_file_of equal_current_source loc_start || file_in_models || (Config.cxx_experimental && decl_trans_context = `Translation && translate_on_demand @@ -130,9 +93,8 @@ let is_file_blacklisted file = let get_sil_location_from_range trans_unit_ctx source_range prefer_first = let sloc1, sloc2 = source_range in let sloc = if not prefer_first then sloc2 else sloc1 in - clang_to_sil_location trans_unit_ctx sloc None + clang_to_sil_location trans_unit_ctx sloc let get_sil_location stmt_info context = let sloc1, _ = stmt_info.Clang_ast_t.si_source_range in clang_to_sil_location context.CContext.translation_unit_context sloc1 - (Some (CContext.get_procdesc context)) diff --git a/infer/src/clang/cLocation.mli b/infer/src/clang/cLocation.mli index 560152d8a..ebc805d10 100644 --- a/infer/src/clang/cLocation.mli +++ b/infer/src/clang/cLocation.mli @@ -11,13 +11,8 @@ open! Utils (** Module for function to retrieve the location (file, line, etc) of instructions *) -(** Inside the AST there may be code or type definitions from other files than the one passed as an - argument. That current file in the translation is saved in this variable. *) -val curr_file : DB.source_file ref - val clang_to_sil_location : CFrontend_config.translation_unit_context -> - Clang_ast_t.source_location -> Cfg.Procdesc.t option -> - Location.t + Clang_ast_t.source_location -> Location.t val get_sil_location : Clang_ast_t.stmt_info -> CContext.t -> Location.t @@ -27,8 +22,6 @@ val should_translate_lib : CFrontend_config.translation_unit_context -> Clang_as val should_do_frontend_check : CFrontend_config.translation_unit_context -> Clang_ast_t.source_range -> bool -val update_curr_file : CFrontend_config.translation_unit_context -> Clang_ast_t.decl_info -> unit - val is_file_blacklisted : string -> bool val source_file_from_path : string -> DB.source_file diff --git a/infer/src/clang/cTrans.ml b/infer/src/clang/cTrans.ml index 520f46521..20ad61dd5 100644 --- a/infer/src/clang/cTrans.ml +++ b/infer/src/clang/cTrans.ml @@ -2032,8 +2032,7 @@ struct let procname = Cfg.Procdesc.get_proc_name context.CContext.procdesc in let loc = (match stmt_info.Clang_ast_t.si_source_range with (l1, _) -> - CLocation.clang_to_sil_location context.CContext.translation_unit_context l1 - (Some context.CContext.procdesc)) in + CLocation.clang_to_sil_location context.CContext.translation_unit_context l1) in (* Given a captured var, return the instruction to assign it to a temp *) let assign_captured_var (cvar, typ) = let id = Ident.create_fresh Ident.knormal in