mirror of
https://github.com/github/codeql.git
synced 2025-12-18 01:33:15 +01: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
29 lines
1.1 KiB
Plaintext
29 lines
1.1 KiB
Plaintext
import cpp
|
|
|
|
int getCFLine(ControlFlowNode n) {
|
|
if n instanceof Function
|
|
then
|
|
// Functions appear at the end of the control flow, so we get
|
|
// nicer results if we take the last position in the function,
|
|
// rather than the function's position (which is the start).
|
|
result = max(ControlFlowNode c | c.getControlFlowScope() = n | c.getLocation().getStartLine())
|
|
else result = n.getLocation().getStartLine()
|
|
}
|
|
|
|
string getASuccessorOrNone(ControlFlowNode n) {
|
|
if exists(n.getASuccessor())
|
|
then
|
|
exists(ControlFlowNode s, string trueSucc, string falseSucc |
|
|
s = n.getASuccessor() and
|
|
(if s = n.getATrueSuccessor() then trueSucc = "<true> " else trueSucc = "") and
|
|
(if s = n.getAFalseSuccessor() then falseSucc = "<false> " else falseSucc = "") and
|
|
result = trueSucc + falseSucc + getCFLine(s) + ": " + s.toString()
|
|
)
|
|
else result = "<none>"
|
|
}
|
|
|
|
from ControlFlowNode n
|
|
select n.getLocation().getFile().getShortName(), n.getControlFlowScope(), getCFLine(n),
|
|
count(n.getAPredecessor*()), // This helps order things sensibly
|
|
n.getLocation(), n, getASuccessorOrNone(n)
|