A fix for empty retain cycle

Reviewed By: akotulski

Differential Revision: D2891906

fb-gh-sync-id: 7dc2ef3
master
Dino Distefano 9 years ago committed by facebook-github-bot-7
parent ef3912cbde
commit 5b91ec9f7f

@ -1310,12 +1310,13 @@ let check_junk ?original_prop pname tenv prop =
(match alloc_attribute, resource with (match alloc_attribute, resource with
| Some _, Sil.Rmemory Sil.Mobjc when (hpred_in_cycle hpred) -> | Some _, Sil.Rmemory Sil.Mobjc when (hpred_in_cycle hpred) ->
(* When there is a cycle in objc we ignore it *) (* When there is a cycle in objc we ignore it *)
(* only if it has weak or unsafe_unretained fields. *) (* only if it's empty or it has weak or unsafe_unretained fields. *)
(* Otherwise we report a retain cycle. *) (* Otherwise we report a retain cycle. *)
let cycle = get_var_retain_cycle (remove_opt original_prop) in let cycle = get_var_retain_cycle (remove_opt original_prop) in
if cycle_has_weak_or_unretained_or_assign_field cycle then let ignore_cycle =
true, exn_retain_cycle cycle (IList.length cycle = 0) ||
else false, exn_retain_cycle cycle (cycle_has_weak_or_unretained_or_assign_field cycle) in
ignore_cycle, exn_retain_cycle cycle
| Some _, Sil.Rmemory Sil.Mobjc | Some _, Sil.Rmemory Sil.Mobjc
| Some _, Sil.Rmemory Sil.Mnew when !Config.curr_language = Config.C_CPP -> | Some _, Sil.Rmemory Sil.Mnew when !Config.curr_language = Config.C_CPP ->
ml_bucket_opt = None, exn_leak ml_bucket_opt = None, exn_leak
@ -1328,7 +1329,7 @@ let check_junk ?original_prop pname tenv prop =
(* we have a retain cycle. Objc object may not have the *) (* we have a retain cycle. Objc object may not have the *)
(* Sil.Mobjc qualifier when added in footprint doing abduction *) (* Sil.Mobjc qualifier when added in footprint doing abduction *)
let cycle = get_var_retain_cycle (remove_opt original_prop) in let cycle = get_var_retain_cycle (remove_opt original_prop) in
false, exn_retain_cycle cycle IList.length cycle = 0, exn_retain_cycle cycle
| _ -> !Config.curr_language = Config.Java, exn_leak) in | _ -> !Config.curr_language = Config.Java, exn_leak) in
let already_reported () = let already_reported () =
let attr_opt_equal ao1 ao2 = match ao1, ao2 with let attr_opt_equal ao1 ao2 = match ao1, ao2 with

Loading…
Cancel
Save