Follow-ups deferred from the #194 L3 WALA engine review (merged in PR #196) — tracked so they don't get dropped. All are non-correctness; the merged engine is sound. Flagged by the final whole-branch review as follow-ups.
- Skip-counter granularity (
L3WalaOverlays): skippedNoMatch conflates three distinct coverage-skip causes — type-not-in-index, signature-not-in-type, and no source BlockStmt. Split into per-cause counters and surface them individually in the coverage log so low-coverage debugging is actionable. (review item M1)
- PDG control-dependence test (
WalaPdgBuilderTest.controlDepEdgeExistsFromIfToGuardedStatement): asserts only the edge source (the if-test line); also assert the destination (the guarded statement), so it proves the branch controls its guarded statement rather than merely that an edge leaves the branch. (review item M3)
- do/while degenerate fallback (
WalaCfgBuilder.wireConditional): the takenBlock == null fallback path has no test coverage. Add a fixture that exercises it.
- (Optional) phi-mediated scalar DDG: WALA's
NORMAL→NORMAL filter drops branch-merge / loop-carried scalar def-use pairs (a phi is not a NormalStatement); the heap points-to DDG is sound. Resolving through phi/pi nodes would bring scalar-DDG completeness closer to the AST engine. See docs/design/notes/l3-dataflow-metrics.md ("phi-mediated-scalar limitation").
Part of epic codellm-devkit/.github#42.
Follow-ups deferred from the #194 L3 WALA engine review (merged in PR #196) — tracked so they don't get dropped. All are non-correctness; the merged engine is sound. Flagged by the final whole-branch review as follow-ups.
L3WalaOverlays):skippedNoMatchconflates three distinct coverage-skip causes — type-not-in-index, signature-not-in-type, and no sourceBlockStmt. Split into per-cause counters and surface them individually in the coverage log so low-coverage debugging is actionable. (review item M1)WalaPdgBuilderTest.controlDepEdgeExistsFromIfToGuardedStatement): asserts only the edge source (theif-test line); also assert the destination (the guarded statement), so it proves the branch controls its guarded statement rather than merely that an edge leaves the branch. (review item M3)WalaCfgBuilder.wireConditional): thetakenBlock == nullfallback path has no test coverage. Add a fixture that exercises it.NORMAL→NORMALfilter drops branch-merge / loop-carried scalar def-use pairs (a phi is not aNormalStatement); the heappoints-toDDG is sound. Resolving through phi/pi nodes would bring scalar-DDG completeness closer to the AST engine. Seedocs/design/notes/l3-dataflow-metrics.md("phi-mediated-scalar limitation").Part of epic codellm-devkit/.github#42.