Skip to content

Commit cfedb47

Browse files
Nick Bentonfacebook-github-bot
authored andcommitted
Tweak default implementation of array_cow_set to await discarded value
Reviewed By: davidpichardie Differential Revision: D52017880 fbshipit-source-id: ebd7d5d678619256cabf185fcd83dc9498638b43
1 parent 0bab3b8 commit cfedb47

File tree

4 files changed

+15
-0
lines changed

4 files changed

+15
-0
lines changed

infer/src/pulse/PulseModelsDSL.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ module Syntax = struct
8181
Option.value_map o ~default:(ret ()) ~f
8282

8383

84+
let ignore (m : 'a model_monad) : unit model_monad =
85+
let* _ = m in
86+
ret ()
87+
88+
8489
let get_data : model_data model_monad = fun data astate -> ret data data astate
8590

8691
let ok x = Ok x

infer/src/pulse/PulseModelsDSL.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ module Syntax : sig
3434

3535
val option_iter : 'a option -> f:('a -> unit model_monad) -> unit model_monad
3636

37+
val ignore : 'a model_monad -> unit model_monad
38+
3739
val assign_ret : aval -> unit model_monad
3840
(** assign the value to the return variable of the current function *)
3941

infer/src/pulse/PulseModelsHack.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,9 @@ let hack_array_cow_set this args : model =
660660
let this = payload_of_arg this in
661661
let args = payloads_of_args args in
662662
let default () =
663+
let* () =
664+
option_iter (List.last args) ~f:(fun value_written -> ignore (await_hack_value value_written))
665+
in
663666
let* fresh = mk_fresh ~model_desc:"hack_array_cow_set" () in
664667
assign_ret fresh
665668
in

infer/tests/codetoanalyze/hack/pulse/asyncvec.hack

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,8 @@ async function vecupdateFN(): Awaitable<void> {
3232
await $v[1];
3333
await $v[0];
3434
}
35+
36+
async function nodynamictypeOK(mixed $c): Awaitable<void> {
37+
$c[0] = genInt3();
38+
await ($c[0]);
39+
}

0 commit comments

Comments
 (0)