Files
codeql/python/ql/test/library-tests/ControlFlow/evaluation-order/NeverReachable.ql
Taus f97bf38f3b Python: Add NeverReachable test
This looks for nodes annotated with `t.never` in the test that are
reachable in the CFG. This should not happen (it messes with various
queries, e.g. the "mixed returns" query), but the test shows that in a
few particular cases (involving the `match` statement where all cases
contain `return`s), we _do_ have reachable nodes that shouldn't be.
2026-05-05 15:21:40 +00:00

27 lines
819 B
Plaintext

/**
* Checks that expressions annotated with `t.never` either have no CFG
* node, or if they do, that the node is not reachable from its scope's
* entry (including within the same basic block).
*/
import python
import TimerUtils
from NeverTimerAnnotation ann
where
exists(ControlFlowNode n, Scope s |
n.getNode() = ann.getExpr() and
s = n.getScope() and
(
// Reachable via inter-block path (includes same block)
s.getEntryNode().getBasicBlock().reaches(n.getBasicBlock())
or
// In same block as entry but at a later index
exists(BasicBlock bb, int i, int j |
bb.getNode(i) = s.getEntryNode() and bb.getNode(j) = n and i < j
)
)
)
select ann, "Node annotated with t.never is reachable in $@", ann.getTestFunction(),
ann.getTestFunction().getName()