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.