Skip to content
UNDER THE HOOD

Pointer identity and contextual call effects (RFC 0014)

Core/CallTargets stores bounded symbol sets with independent unknown and null alternatives. AnalysisState carries these values through pointer and record operations. Summary value sources can carry function values; pointer comparison predicates share the existing bounded guard representation.

DataflowCallbacks.cpp resolves each call against its current state. CallbackSummaries.cpp specializes ordinary FunctionDataflow analyses under callback bindings. Contexts are bounded and cached, and active recursive contexts remain explicit incomplete boundaries. Generic summaries record the parameter and global paths used as callbacks. A caller binds those paths; the callee body keeps the associated userdata and operation ordering. Declarations retain authority over the specialized summary.

UnitExports carries callback requests, specialized summaries and global function values. Interfaces capable of accepting callbacks introduce reverse scheduling dependencies, allowing requests and their answers to settle in the existing program SCC fixpoint before reporting. Function references also introduce dependencies, including references in global initializers. Extra type-compatible edges order inference but do not contribute effects.

DataflowMemory.cpp snapshots complete pointer or compatible record copies before writing their destination. Existing ownership, heap and alias transfer machinery applies the snapshot. Partial or unsupported pointer-containing copies discard affected must-facts and record incomplete coverage. DataflowViews.cpp validates the record views attached to summary paths; Analysis supplies layout keys and Core remains independent of Clang.

Summary and sidecar format 10 serialize these values, pointer predicates, record views and incomplete reasons. All representations use deterministic ordering, and sidecar readers reject malformed or oversized contexts.