Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 144e34c

Browse filesBrowse files
committed
Shared: Use shared SuccessorType in shared Cfg and BasicBlock libs.
1 parent 4685b4f commit 144e34c
Copy full SHA for 144e34c

22 files changed

+101-131Lines changed: 101 additions & 131 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll‎

Copy file name to clipboardExpand all lines: actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll
-6Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,8 @@ private module Implementation implements CfgShared::InputSig<Location> {
101101
last(scope.(CompositeAction), e, c)
102102
}
103103

104-
predicate successorTypeIsSimple(SuccessorType t) { t instanceof DirectSuccessor }
105-
106-
predicate successorTypeIsCondition(SuccessorType t) { t instanceof BooleanSuccessor }
107-
108104
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
109105

110-
predicate isAbnormalExitType(SuccessorType t) { none() }
111-
112106
int idOfAstNode(AstNode node) { none() }
113107

114108
int idOfCfgScope(CfgScope scope) { none() }
Collapse file

‎cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll‎

Copy file name to clipboardExpand all lines: cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
+16Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Provides classes that specify the conditions under which control flows along a given edge.
33
*/
44

5+
private import codeql.controlflow.SuccessorType
56
private import internal.EdgeKindInternal
67

78
private newtype TEdgeKind =
@@ -28,6 +29,21 @@ abstract private class EdgeKindImpl extends TEdgeKind {
2829

2930
final class EdgeKind = EdgeKindImpl;
3031

32+
private SuccessorType getAMatchingSpecificSuccessorType(EdgeKind k) {
33+
result.(BooleanSuccessor).getValue() = true and k instanceof TrueEdge
34+
or
35+
result.(BooleanSuccessor).getValue() = false and k instanceof FalseEdge
36+
or
37+
result instanceof ExceptionSuccessor and k instanceof ExceptionEdge
38+
}
39+
40+
SuccessorType getAMatchingSuccessorType(EdgeKind k) {
41+
result = getAMatchingSpecificSuccessorType(k)
42+
or
43+
not exists(getAMatchingSpecificSuccessorType(k)) and
44+
result instanceof DirectSuccessor
45+
}
46+
3147
/**
3248
* A "goto" edge, representing the unconditional successor of an `Instruction`
3349
* or `IRBlock`.
Collapse file

‎cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll‎

Copy file name to clipboardExpand all lines: cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll
+8-3Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
265265
}
266266

267267
module IRCfg implements BB::CfgSig<Language::Location> {
268-
class ControlFlowNode = Instruction;
268+
private import codeql.controlflow.SuccessorType
269269

270-
class SuccessorType = EdgeKind;
270+
class ControlFlowNode = Instruction;
271271

272272
final private class FinalIRBlock = IRBlock;
273273

@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
280280

281281
BasicBlock getASuccessor() { result = super.getASuccessor() }
282282

283-
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) }
283+
BasicBlock getASuccessor(SuccessorType t) {
284+
exists(EdgeKind k |
285+
result = super.getSuccessor(k) and
286+
t = getAMatchingSuccessorType(k)
287+
)
288+
}
284289

285290
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
286291

Collapse file

‎cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll‎

Copy file name to clipboardExpand all lines: cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll
+8-3Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
265265
}
266266

267267
module IRCfg implements BB::CfgSig<Language::Location> {
268-
class ControlFlowNode = Instruction;
268+
private import codeql.controlflow.SuccessorType
269269

270-
class SuccessorType = EdgeKind;
270+
class ControlFlowNode = Instruction;
271271

272272
final private class FinalIRBlock = IRBlock;
273273

@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
280280

281281
BasicBlock getASuccessor() { result = super.getASuccessor() }
282282

283-
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) }
283+
BasicBlock getASuccessor(SuccessorType t) {
284+
exists(EdgeKind k |
285+
result = super.getSuccessor(k) and
286+
t = getAMatchingSuccessorType(k)
287+
)
288+
}
284289

285290
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
286291

Collapse file

‎cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll‎

Copy file name to clipboardExpand all lines: cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll
+8-3Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
265265
}
266266

267267
module IRCfg implements BB::CfgSig<Language::Location> {
268-
class ControlFlowNode = Instruction;
268+
private import codeql.controlflow.SuccessorType
269269

270-
class SuccessorType = EdgeKind;
270+
class ControlFlowNode = Instruction;
271271

272272
final private class FinalIRBlock = IRBlock;
273273

@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
280280

281281
BasicBlock getASuccessor() { result = super.getASuccessor() }
282282

283-
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) }
283+
BasicBlock getASuccessor(SuccessorType t) {
284+
exists(EdgeKind k |
285+
result = super.getSuccessor(k) and
286+
t = getAMatchingSuccessorType(k)
287+
)
288+
}
284289

285290
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
286291

Collapse file

‎csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll‎

Copy file name to clipboardExpand all lines: csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll
-2Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,6 @@ private class EntryBasicBlockAlias = EntryBasicBlock;
346346
module Cfg implements BB::CfgSig<Location> {
347347
class ControlFlowNode = ControlFlow::Node;
348348

349-
class SuccessorType = ControlFlow::SuccessorType;
350-
351349
class BasicBlock = BasicBlockAlias;
352350

353351
class EntryBasicBlock = EntryBasicBlockAlias;
Collapse file

‎csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll‎

Copy file name to clipboardExpand all lines: csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll
+1-10Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,10 @@ private module CfgInput implements CfgShared::InputSig<Location> {
7979
Impl::scopeLast(scope, last, c)
8080
}
8181

82-
class SuccessorType = ST::SuccessorType;
82+
private class SuccessorType = ST::SuccessorType;
8383

8484
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
8585

86-
predicate successorTypeIsSimple(SuccessorType t) { t instanceof ST::DirectSuccessor }
87-
88-
predicate successorTypeIsCondition(SuccessorType t) { t instanceof ST::ConditionalSuccessor }
89-
90-
predicate isAbnormalExitType(SuccessorType t) {
91-
t instanceof ST::ExceptionSuccessor or
92-
t instanceof ST::ExitSuccessor
93-
}
94-
9586
int idOfAstNode(AstNode node) { result = node.getId() }
9687

9788
int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) }
Collapse file

‎csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll‎

Copy file name to clipboardExpand all lines: csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll
-2Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,6 @@ class ConditionBlock extends PreBasicBlock {
163163
module PreCfg implements BB::CfgSig<Location> {
164164
class ControlFlowNode = ControlFlowElement;
165165

166-
class SuccessorType = Cfg::SuccessorType;
167-
168166
class BasicBlock = PreBasicBlock;
169167

170168
class EntryBasicBlock extends BasicBlock {
Collapse file

‎java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll‎

Copy file name to clipboardExpand all lines: java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll
+2-5Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ module;
77
import java
88
import Dominance
99
private import codeql.controlflow.BasicBlock as BB
10+
private import codeql.controlflow.SuccessorType
1011

1112
private module Input implements BB::InputSig<Location> {
12-
import codeql.controlflow.SuccessorType
13-
1413
/** Hold if `t` represents a conditional successor type. */
1514
predicate successorTypeIsCondition(SuccessorType t) { none() }
1615

@@ -96,7 +95,7 @@ class BasicBlock extends BbImpl::BasicBlock {
9695
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
9796

9897
/** Gets an immediate successor of this basic block of a given type, if any. */
99-
BasicBlock getASuccessor(Input::SuccessorType t) { result = super.getASuccessor(t) }
98+
BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) }
10099

101100
BasicBlock getASuccessor() { result = super.getASuccessor() }
102101

@@ -161,8 +160,6 @@ private class BasicBlockAlias = BasicBlock;
161160
module Cfg implements BB::CfgSig<Location> {
162161
class ControlFlowNode = BbImpl::ControlFlowNode;
163162

164-
class SuccessorType = BbImpl::SuccessorType;
165-
166163
class BasicBlock = BasicBlockAlias;
167164

168165
class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { }
Collapse file

‎java/ql/lib/semmle/code/java/controlflow/Guards.qll‎

Copy file name to clipboardExpand all lines: java/ql/lib/semmle/code/java/controlflow/Guards.qll
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre
139139
)
140140
}
141141

142-
private module SuccessorTypes implements SharedGuards::SuccessorTypesSig<SuccessorType> {
142+
private module SuccessorTypes implements SharedGuards::SuccessorTypesSig {
143143
import codeql.controlflow.SuccessorType
144144
}
145145

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.