Related pointer arguments
RFC 0016 checks known helpers under relationships established by their callers. No annotation is needed for this ordinary aliasing pattern:
static void release_then_write(char *a, char *b) { free(a); *b = 1; // use-after-free when called with (p, p)}
static void write_then_release(char *a, char *b) { *b = 1; free(a); // the same (p, p) relationship is safe here}The checker also distinguishes reset(&p, &p) from reset(&p, &q) when
both cells initially contain one allocation: replacing *out changes the
first cell, while a saved copy can still refer to the released value. Supported
record fields, selected elements, globals and actual callback targets carry
the same contextual checking across files and compiler objects. An ownership
annotation on a known definition does not skip its body checks.
Errors name the operation in the helper, with a note at the originating call
when available. --dump-analysis displays call-context entries containing
relative aliases, distinct objects, entry facts and the resulting summary.
Facts describe values on entry; subsequent writes still update or invalidate
them. WEAVEC_UNSAFE retains effects and suppresses contextual reports from
that call, including delayed checking in another file.
An unresolved required relationship, unavailable view or exceeded context
bound reports analysis-incomplete and retains ordinary call effects.
Calls whose inputs have no established interacting relationship still use
generic summaries; silence does not prove arbitrary pointers disjoint.
The validation report records the supported matrix
and remaining coverage limits. These context records are retained in the
current format 24 sidecars; rebuild older objects before link analysis. Checked
mode also specializes exact scalar inputs and fields under the same context
limits (RFC 0019).