mirror of
https://github.com/github/codeql.git
synced 2026-03-29 19:58:17 +02:00
Some files that will change in #1736 have been spared. ./build -j4 target/jars/qlformat find ql/cpp/ql -name "*.ql" -print0 | xargs -0 target/jars/qlformat --input find ql/cpp/ql -name "*.qll" -print0 | xargs -0 target/jars/qlformat --input (cd ql && git checkout 'cpp/ql/src/semmle/code/cpp/ir/implementation/**/*SSA*.qll') buildutils-internal/scripts/pr-checks/sync-identical-files.py --latest
31 lines
975 B
Plaintext
31 lines
975 B
Plaintext
import cpp
|
|
import semmle.code.cpp.controlflow.LocalScopeVariableReachability
|
|
|
|
// Test that def/use algorithm is an instance of LocalScopeVariableReachability
|
|
class MyDefOrUse extends LocalScopeVariableReachability {
|
|
MyDefOrUse() { this = "MyDefUse" }
|
|
|
|
override predicate isSource(ControlFlowNode node, LocalScopeVariable v) { definition(v, node) }
|
|
|
|
override predicate isSink(ControlFlowNode node, LocalScopeVariable v) { useOfVar(v, node) }
|
|
|
|
override predicate isBarrier(ControlFlowNode node, LocalScopeVariable v) {
|
|
definitionBarrier(v, node)
|
|
}
|
|
}
|
|
|
|
predicate equivalence() {
|
|
forall(LocalScopeVariable v, Expr first, Expr second | definitionUsePair(v, first, second) |
|
|
exists(MyDefOrUse x | x.reaches(first, v, second))
|
|
) and
|
|
forall(LocalScopeVariable v, Expr first, Expr second |
|
|
exists(MyDefOrUse x | x.reaches(first, v, second))
|
|
|
|
|
definitionUsePair(v, first, second)
|
|
)
|
|
}
|
|
|
|
from int i
|
|
where if equivalence() then i = 0 else i = 1
|
|
select i
|