Experiment: restore captured-jump selectivity with shared SSA - #22402
Draft
yoff wants to merge 2 commits into
Draft
Experiment: restore captured-jump selectivity with shared SSA#22402yoff wants to merge 2 commits into
yoff wants to merge 2 commits into
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Experiment
Dependent on #21925. This draft does not claim semantic equivalence with legacy ESSA; it measures the closest general shared-SSA gate for
TypeTrackingInput::capturedJumpStep.The gate now requires an actual non-phi
SsaImpl::EssaNodeDefinitionwhosegetSourceVariable()is the capturedSsaSourceVariableand whosegetDefiningNode()is the candidateCfg::DefinitionNode, instead of admitting every syntacticVariable.getAStore().Exact two-commit structure
439edf66b1fcc4b6c73827f1bad0e9d2716db4e8— red-state inline regression test; broad behavior passes with the safe read markedSPURIOUS.33133d6cc5e8cd179d7787454140da64c46220e3— selective shared-SSA implementation; expected lost captures becomeMISSINGand the safe-read spurious results disappear.Tuple measurements
zauberzeug/nicegui@26756ccflocal corpus DBopenai/codex@cd2d84d4local corpus DBqlustered/deepdiff@6f3d5eeblocal corpus DBNo reusable exact Airflow
a9da0f7fb48dc7526b2745be3e8fe64e1c775da2database was present in the current worktree, session artifacts, or known local CodeQL database/cache locations, so this experiment does not fabricate an Airflow measurement.Precision trade-off
The focused test assigns
tracked, reads it through a closure, reassigns the variable to a safe value, then reads through the closure again. The broad gate reports both reads. The SSA gate removes the one broad-only write tuple: three true-positive annotation sites before reassignment are intentionally recorded asMISSING, while twoSPURIOUSannotation sites for the safe sibling read disappear. This is evidence of restored legacy-style selectivity, not proof of semantic equivalence.Validation
codeql test run python/ql/test/library-tests/dataflow/typetracking --threads=2— 2/2 passed in both red and green states.codeql test run python/ql/test/library-tests/dataflow/typetracking python/ql/test/library-tests/dataflow/global-or-captured-vars python/ql/test/library-tests/dataflow/variable-capture python/ql/test/library-tests/dataflow/regression --threads=2— 7/7 passed.codeql query format --check-only python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll— passed.The branch is ready for a DCA comparison against #21925 (including baseline #38534 / data branch
data/yoff/PR-21925-0-python__1).