You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 4dfaa59
Browse filesBrowse the repository at this point in the historyBrowse files
rc: hold a global argument from its read, and give a const read of a global a count
Two shapes the memory-model fuzzer (#646) found double-freeing under rc
since #639.
- holdGlobalArguments retained the argument right before the call. A
later argument of the same call could give the global a new value
first (`f(G, (G = mk(), x))`, `f(H.n, (H.n = mk(), x))`): its release
freed the block, and the hold then retained and released a freed
block. The retain (and the #645 unwind slot) now follow the read.
- `const n = G` was folded into the read, holding no count. Once the
global got a new value, here or in a call, `n` dangled (fuzzer R1).
#639 made that a crash: `run(n.v)`, with `run` assigning G, held and
released a field of the freed block. Under rc a const read out of a
global, or an interface or bound method made over one, now gets
storage like a const read out of a field or an element (#635, #641,
#642, #644). Under own the folded read stays a borrow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0 commit comments