Use the block captured variables as mangled

Reviewed By: sblackshear

Differential Revision: D3593332

fbshipit-source-id: 130e922
master
Dulma Churchill 9 years ago committed by Facebook Github Bot 0
parent 4078a2b276
commit fb607ef388

@ -1286,7 +1286,7 @@ let check_call_to_objc_block_error pdesc prop fun_exp loc =
match get_exp_called () with
| Some (_, Sil.Lvar pvar) -> (* pvar is the block *)
let name = Pvar.get_name pvar in
IList.exists (fun (cn, _) -> (Mangled.to_string name) = (Mangled.to_string cn)) (Cfg.Procdesc.get_captured pdesc)
IList.exists (fun (cn, _) -> (Mangled.equal name cn)) (Cfg.Procdesc.get_captured pdesc)
| _ -> false in
let is_field_deref () = (*Called expression is a field *)
match get_exp_called () with

@ -363,10 +363,9 @@ let create_local_procdesc cfg tenv ms fbody captured is_objc_inst_method =
&& CMethod_signature.ms_get_lang ms = Config.CPP in
let create_new_procdesc () =
let formals = get_formal_parameters tenv ms in
let captured_str =
IList.map (fun (var, t) -> (Mangled.from_string (Pvar.to_string var), t)) captured in
let captured_mangled = IList.map (fun (var, t) -> (Pvar.get_name var), t) captured in
(* Captured variables for blocks are treated as parameters *)
let formals = captured_str @ formals in
let formals = captured_mangled @ formals in
let source_range = CMethod_signature.ms_get_loc ms in
Printing.log_out "\nCreating a new procdesc for function: '%s'\n@." pname;
let loc_start = CLocation.get_sil_location_from_range source_range true in

@ -19,20 +19,13 @@ module L = Logging
let is_custom_var_pointer pointer =
pointer <= 0
let is_captured procdesc vname =
IList.exists
(fun (name, _) -> (Mangled.to_string name) = vname)
(Cfg.Procdesc.get_captured procdesc)
let sil_var_of_decl context var_decl procname =
let outer_procname = CContext.get_outer_procname context in
let procdesc = context.CContext.procdesc in
let open Clang_ast_t in
match var_decl with
| VarDecl (decl_info, name_info, type_ptr, var_decl_info) ->
let shoud_be_mangled =
not (is_custom_var_pointer decl_info.Clang_ast_t.di_pointer) &&
not (is_captured procdesc name_info.Clang_ast_t.ni_name) in
not (is_custom_var_pointer decl_info.Clang_ast_t.di_pointer) in
let var_decl_details = Some (decl_info, type_ptr, var_decl_info, shoud_be_mangled) in
General_utils.mk_sil_var name_info var_decl_details procname outer_procname
| ParmVarDecl (decl_info, name_info, type_ptr, var_decl_info) ->

Loading…
Cancel
Save