renew
nanofil
In Fil-C free sets the upper bound to the lower and raises the free flag (InvisiCaps)
A renew reuses an earlier check's bounds: renewLo, Hi, Rights, Align of [Q1, P] trusts the dominating check that made Q1 for P's bounds and tests again only what a free changes, that the object is not freed (and, for a write, not read-only). It is the -O default (check_reuse:renew_checks/2, m7.md, round 4).
Validator: Q1 is a renew source, and P is at a pointer distance from its pointer, inside its span.
interp.pl:
interp:renew_res/4; Q1 of another capability isuncheckedalias, a failing check not on a freed objectuncheckedspan. Rocq: the opRenew,renew_res; Renew.v'srenew_not_uncheckedand, along runs,run_reuse_checked.
Why it is sound: an object's bounds change only by free, which the flag test catches.
Linked from
- Doomed.v: renew_not_alias
- How Fil-C works: What makes it fast enough
- NFB guide (Argon): Opcode map (`nfb_form/3`)
- NFB guide (Argon): Safepoints, `free`, and check-reuse evidence
- NFB guide (Argon): `trap(Reason)` vs. `unchecked(Reason)`
- NFB guide (Wonder): 11.2 Function bodies and instruction words
- NFB guide (Wonder): 7.1 What changes
- NFB guide (Wonderful): 8. The checked vocabulary
- Ops.v: renew_res
- Renew.v: renew_access
- Renew.v: renew_not_unchecked
- Renew.v: renew_source_def
- Semantics.v: doomed_result
- StepRules.v: op_renew
- Syntax.v: value
- Validate.v: checked_inst_rest
- evidence
- live
- pointer distance
- renew source
- renew_hull
- renew_if
- reuse
- rights
- the formal campaign: Against Campaigns 4 to 6
- the formal campaign: Campaign 3: the soundness theorem
- the formal campaign: Campaign 5: static discharge by certificate
- the formal campaign: Inquiries and investigations
- the formal campaign: The claims, kept apart
- the formal campaign: Where the per-function obligations come from
- the guide: 9. Check evidence and the validator: check_reuse.pl, ir.pl
- the guide: Plain and -O
- the guide: Safepoints and GC roots
- the guide: The IR is the contract