Skip to content

L4 port lattice is partially disconnected from the statement ddg (3 of 4 binding-edge classes missing) #81

Description

@rahlk

Sibling finding from codellm-devkit/codeanalyzer-python#115 (propagation sweep; fixed there for 1.1.1).

src/schema/v2/dataflow.ts emits only ONE of the four statement ↔ port ddg binding classes: the return/global → @formal_out routing (prov:["reaching-defs"]). The other three are not emitted:

  • def stmt → actual_in:k (argument binding at the call site — emitL4 creates the actual_in vertex and its param_in edge, but no ddg edge feeds the port)
  • actual_out → use stmt (return-value binding back into the caller)
  • formal_in:k → first-use stmts (parameter flow inside the callee — currently carried only by @entry → stmt edges, so entering via param_in dead-ends at formal_in)

Consequence, same as the python issue: an end-to-end flows_to(def_stmt, callee_formal) or return-value walk cannot cross a call except through the formal_out leg. The python fix (codeanalyzer-python PR for #115) emits the full set with prov:["reaching-defs"] — the label this repo already uses — so the vocabulary is shared; this is emission-only.

Suggested acceptance: on a 2-function sample (y = build(x)), assert ddg contains def→actual_in, actual_out→callsite, formal_in→first-use, return→formal_out, all reaching-defs-tagged, endpoints present in body.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions