[clang] Disable the condition always true or false check for clang as it is too noisy.

Reviewed By: jvillard

Differential Revision: D3967565

fbshipit-source-id: b81ea0c
master
Dulma Churchill 8 years ago committed by Facebook Github Bot
parent 3d1eba890a
commit bd22999950

@ -1039,25 +1039,27 @@ let rec sym_exec tenv current_pdesc _instr (prop_: Prop.normal Prop.t) path
| Sil.Prune (cond, loc, true_branch, ik) ->
let prop__ = Attribute.nullify_exp_with_objc_null tenv prop_ cond in
let check_condition_always_true_false () =
let report_condition_always_true_false i =
let skip_loop = match ik with
| Sil.Ik_while | Sil.Ik_for ->
not (IntLit.iszero i) (* skip wile(1) and for (;1;) *)
| Sil.Ik_dowhile ->
true (* skip do..while *)
| Sil.Ik_land_lor ->
true (* skip subpart of a condition obtained from compilation of && and || *)
| _ -> false in
true_branch && not skip_loop in
match Prop.exp_normalize_prop tenv Prop.prop_emp cond with
| Exp.Const (Const.Cint i) when report_condition_always_true_false i ->
let node = State.get_node () in
let desc = Errdesc.explain_condition_always_true_false tenv i cond node loc in
let exn =
Exceptions.Condition_always_true_false (desc, not (IntLit.iszero i), __POS__) in
let pre_opt = State.get_normalized_pre (Abs.abstract_no_symop current_pname) in
Reporting.log_warning current_pname ?pre:pre_opt exn
| _ -> () in
if !Config.curr_language <> Config.Clang ||
Config.report_condition_always_true_in_clang then
let report_condition_always_true_false i =
let skip_loop = match ik with
| Sil.Ik_while | Sil.Ik_for ->
not (IntLit.iszero i) (* skip wile(1) and for (;1;) *)
| Sil.Ik_dowhile ->
true (* skip do..while *)
| Sil.Ik_land_lor ->
true (* skip subpart of a condition obtained from compilation of && and || *)
| _ -> false in
true_branch && not skip_loop in
match Prop.exp_normalize_prop tenv Prop.prop_emp cond with
| Exp.Const (Const.Cint i) when report_condition_always_true_false i ->
let node = State.get_node () in
let desc = Errdesc.explain_condition_always_true_false tenv i cond node loc in
let exn =
Exceptions.Condition_always_true_false (desc, not (IntLit.iszero i), __POS__) in
let pre_opt = State.get_normalized_pre (Abs.abstract_no_symop current_pname) in
Reporting.log_warning current_pname ?pre:pre_opt exn
| _ -> () in
if not Config.report_runtime_exceptions then
check_already_dereferenced tenv current_pname cond prop__;
check_condition_always_true_false ();

@ -107,6 +107,8 @@ let checks_disabled_by_default = [
let clang_build_output_dir_name = "build_output"
let report_condition_always_true_in_clang = false
(** Experimental: if true do some specialized analysis of concurrent constructs. *)
let csl_analysis = true

@ -68,6 +68,7 @@ val buck_generated_folder : string
val buck_infer_deps_file_name : string
val captured_dir_name : string
val checks_disabled_by_default : string list
val report_condition_always_true_in_clang : bool
val clang_build_output_dir_name : string
val cpp_models_dir : string
val csl_analysis : bool

Loading…
Cancel
Save