@ -9,6 +9,8 @@ open! IStd
(* * Module for the checks called by Eradicate. *)
module L = Logging
let report_error tenv = TypeErr . report_error ( EradicateCheckers . report_error tenv )
let explain_expr tenv node e =
@ -117,15 +119,18 @@ let check_condition_for_redundancy tenv ~is_always_true find_canonical_duplicate
(* * Check an assignment to a field. *)
let check_field_assignment ~ nullsafe_mode tenv find_canonical_duplicate curr_pdesc node instr_ref
typestate exp_lhs exp_rhs typ loc fname annotated_field_opt typecheck_expr : unit =
L . d_with_indent ~ name : " check_field_assignment " ( fun () ->
let curr_pname = Procdesc . get_proc_name curr_pdesc in
let curr_pattrs = Procdesc . get_attributes curr_pdesc in
let t_lhs , inferred_nullability_lhs =
L . d_strln " Typechecking lhs " ;
typecheck_expr node instr_ref curr_pdesc typestate exp_lhs
(* TODO ( T54687014 ) optimistic default might be an unsoundness issue - investigate *)
( typ , InferredNullability . create TypeOrigin . OptimisticFallback )
loc
in
let _ , inferred_nullability_rhs =
L . d_strln " Typechecking rhs " ;
typecheck_expr node instr_ref curr_pdesc typestate exp_rhs
(* TODO ( T54687014 ) optimistic default might be an unsoundness issue - investigate *)
( typ , InferredNullability . create TypeOrigin . OptimisticFallback )
@ -166,7 +171,7 @@ let check_field_assignment ~nullsafe_mode tenv find_canonical_duplicate curr_pde
; assignment_location = loc
; rhs_origin
; assignment_type = AssignmentRule . AssigningToField fname } )
( Some instr_ref ) loc curr_pdesc )
( Some instr_ref ) loc curr_pdesc ) )
(* Check if the field declared as not nullable ( implicitly or explicitly ) . If the field is