mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
C++: Sync files.
This commit is contained in:
@@ -7,6 +7,7 @@ import Instruction
|
|||||||
private import internal.IRBlockImports as Imports
|
private import internal.IRBlockImports as Imports
|
||||||
import Imports::EdgeKind
|
import Imports::EdgeKind
|
||||||
private import Cached
|
private import Cached
|
||||||
|
private import codeql.controlflow.BasicBlock as BB
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the
|
* Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the
|
||||||
@@ -263,6 +264,45 @@ private predicate isEntryBlock(TIRBlock block) {
|
|||||||
block = MkIRBlock(any(EnterFunctionInstruction enter))
|
block = MkIRBlock(any(EnterFunctionInstruction enter))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module IRCfg implements BB::CfgSig<Language::Location> {
|
||||||
|
class ControlFlowNode = Instruction;
|
||||||
|
|
||||||
|
class SuccessorType = EdgeKind;
|
||||||
|
|
||||||
|
class BasicBlock extends IRBlock {
|
||||||
|
ControlFlowNode getNode(int i) { result = this.getInstruction(i) }
|
||||||
|
|
||||||
|
ControlFlowNode getLastNode() { result = super.getLastInstruction() }
|
||||||
|
|
||||||
|
int length() { result = this.getInstructionCount() }
|
||||||
|
|
||||||
|
BasicBlock getASuccessor() { result = super.getASuccessor() }
|
||||||
|
|
||||||
|
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) }
|
||||||
|
|
||||||
|
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
|
||||||
|
|
||||||
|
predicate dominates(BasicBlock bb) { super.dominates(bb) }
|
||||||
|
|
||||||
|
BasicBlock getImmediateDominator() { result.immediatelyDominates(this) }
|
||||||
|
|
||||||
|
predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df }
|
||||||
|
|
||||||
|
predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) }
|
||||||
|
|
||||||
|
predicate postDominates(BasicBlock bb) { super.postDominates(bb) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[nomagic]
|
||||||
|
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
|
||||||
|
bb1.getASuccessor() = bb2 and
|
||||||
|
bb1 = bb2.getImmediateDominator() and
|
||||||
|
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
|
||||||
|
}
|
||||||
|
|
||||||
|
predicate entryBlock(BasicBlock bb) { isEntryBlock(bb) }
|
||||||
|
}
|
||||||
|
|
||||||
cached
|
cached
|
||||||
private module Cached {
|
private module Cached {
|
||||||
cached
|
cached
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import Instruction
|
|||||||
private import internal.IRBlockImports as Imports
|
private import internal.IRBlockImports as Imports
|
||||||
import Imports::EdgeKind
|
import Imports::EdgeKind
|
||||||
private import Cached
|
private import Cached
|
||||||
|
private import codeql.controlflow.BasicBlock as BB
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the
|
* Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the
|
||||||
@@ -263,6 +264,45 @@ private predicate isEntryBlock(TIRBlock block) {
|
|||||||
block = MkIRBlock(any(EnterFunctionInstruction enter))
|
block = MkIRBlock(any(EnterFunctionInstruction enter))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module IRCfg implements BB::CfgSig<Language::Location> {
|
||||||
|
class ControlFlowNode = Instruction;
|
||||||
|
|
||||||
|
class SuccessorType = EdgeKind;
|
||||||
|
|
||||||
|
class BasicBlock extends IRBlock {
|
||||||
|
ControlFlowNode getNode(int i) { result = this.getInstruction(i) }
|
||||||
|
|
||||||
|
ControlFlowNode getLastNode() { result = super.getLastInstruction() }
|
||||||
|
|
||||||
|
int length() { result = this.getInstructionCount() }
|
||||||
|
|
||||||
|
BasicBlock getASuccessor() { result = super.getASuccessor() }
|
||||||
|
|
||||||
|
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) }
|
||||||
|
|
||||||
|
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
|
||||||
|
|
||||||
|
predicate dominates(BasicBlock bb) { super.dominates(bb) }
|
||||||
|
|
||||||
|
BasicBlock getImmediateDominator() { result.immediatelyDominates(this) }
|
||||||
|
|
||||||
|
predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df }
|
||||||
|
|
||||||
|
predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) }
|
||||||
|
|
||||||
|
predicate postDominates(BasicBlock bb) { super.postDominates(bb) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[nomagic]
|
||||||
|
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
|
||||||
|
bb1.getASuccessor() = bb2 and
|
||||||
|
bb1 = bb2.getImmediateDominator() and
|
||||||
|
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
|
||||||
|
}
|
||||||
|
|
||||||
|
predicate entryBlock(BasicBlock bb) { isEntryBlock(bb) }
|
||||||
|
}
|
||||||
|
|
||||||
cached
|
cached
|
||||||
private module Cached {
|
private module Cached {
|
||||||
cached
|
cached
|
||||||
|
|||||||
Reference in New Issue
Block a user