Skip to content

Commit 09b2c5a

Browse files
committed
BasicBlock: Replace entryBlock predicate with subclass.
1 parent e2eb6db commit 09b2c5a

File tree

13 files changed

+54
-29
lines changed

13 files changed

+54
-29
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,16 @@ module IRCfg implements BB::CfgSig<Language::Location> {
295295
predicate postDominates(BasicBlock bb) { super.postDominates(bb) }
296296
}
297297

298+
class EntryBasicBlock extends BasicBlock {
299+
EntryBasicBlock() { isEntryBlock(this) }
300+
}
301+
298302
pragma[nomagic]
299303
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
300304
bb1.getASuccessor() = bb2 and
301305
bb1 = bb2.getImmediateDominator() and
302306
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
303307
}
304-
305-
predicate entryBlock(BasicBlock bb) { isEntryBlock(bb) }
306308
}
307309

308310
cached

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,16 @@ module IRCfg implements BB::CfgSig<Language::Location> {
295295
predicate postDominates(BasicBlock bb) { super.postDominates(bb) }
296296
}
297297

298+
class EntryBasicBlock extends BasicBlock {
299+
EntryBasicBlock() { isEntryBlock(this) }
300+
}
301+
298302
pragma[nomagic]
299303
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
300304
bb1.getASuccessor() = bb2 and
301305
bb1 = bb2.getImmediateDominator() and
302306
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
303307
}
304-
305-
predicate entryBlock(BasicBlock bb) { isEntryBlock(bb) }
306308
}
307309

308310
cached

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,16 @@ module IRCfg implements BB::CfgSig<Language::Location> {
295295
predicate postDominates(BasicBlock bb) { super.postDominates(bb) }
296296
}
297297

298+
class EntryBasicBlock extends BasicBlock {
299+
EntryBasicBlock() { isEntryBlock(this) }
300+
}
301+
298302
pragma[nomagic]
299303
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
300304
bb1.getASuccessor() = bb2 and
301305
bb1 = bb2.getImmediateDominator() and
302306
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
303307
}
304-
305-
predicate entryBlock(BasicBlock bb) { isEntryBlock(bb) }
306308
}
307309

308310
cached

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,16 +341,18 @@ final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBl
341341

342342
private class BasicBlockAlias = BasicBlock;
343343

344+
private class EntryBasicBlockAlias = EntryBasicBlock;
345+
344346
module Cfg implements BB::CfgSig<Location> {
345347
class ControlFlowNode = ControlFlow::Node;
346348

347349
class SuccessorType = ControlFlow::SuccessorType;
348350

349351
class BasicBlock = BasicBlockAlias;
350352

353+
class EntryBasicBlock = EntryBasicBlockAlias;
354+
351355
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
352356
BasicBlocksImpl::dominatingEdge(bb1, bb2)
353357
}
354-
355-
predicate entryBlock(BasicBlock bb) { bb instanceof EntryBasicBlock }
356358
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,11 @@ module PreCfg implements BB::CfgSig<Location> {
167167

168168
class BasicBlock = PreBasicBlock;
169169

170+
class EntryBasicBlock extends BasicBlock {
171+
EntryBasicBlock() { entryBB(this) }
172+
}
173+
170174
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
171175
conditionBlockImmediatelyControls(bb1, bb2, _)
172176
}
173-
174-
predicate entryBlock(BasicBlock bb) { entryBB(bb) }
175177
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ module Cfg implements BB::CfgSig<Location> {
165165

166166
class BasicBlock = BasicBlockAlias;
167167

168-
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { BbImpl::dominatingEdge(bb1, bb2) }
168+
class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { }
169169

170-
predicate entryBlock(BasicBlock bb) { BbImpl::entryBlock(bb) }
170+
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { BbImpl::dominatingEdge(bb1, bb2) }
171171
}

javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,13 +402,15 @@ module Public {
402402
predicate postDominates(BasicBlock bb) { this.(ReachableBasicBlock).postDominates(bb) }
403403
}
404404

405+
class EntryBasicBlock extends BasicBlock {
406+
EntryBasicBlock() { entryBB(this) }
407+
}
408+
405409
pragma[nomagic]
406410
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
407411
bb1.getASuccessor() = bb2 and
408412
bb1 = bb2.getImmediateDominator() and
409413
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
410414
}
411-
412-
predicate entryBlock(BasicBlock bb) { entryBB(bb) }
413415
}
414416
}

python/ql/lib/semmle/python/Flow.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,12 +1295,14 @@ module Cfg implements BB::CfgSig<Location> {
12951295
}
12961296
}
12971297

1298+
class EntryBasicBlock extends BasicBlock {
1299+
EntryBasicBlock() { this.getNode(0).isEntryNode() }
1300+
}
1301+
12981302
pragma[nomagic]
12991303
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
13001304
bb1.getASuccessor() = bb2 and
13011305
bb1 = bb2.getImmediateDominator() and
13021306
forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred))
13031307
}
1304-
1305-
predicate entryBlock(BasicBlock bb) { bb.getNode(0).isEntryNode() }
13061308
}

ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,8 @@ final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBl
300300

301301
private class BasicBlockAlias = BasicBlock;
302302

303+
private class EntryBasicBlockAlias = EntryBasicBlock;
304+
303305
private class SuccessorTypeAlias = SuccessorType;
304306

305307
module Cfg implements BB::CfgSig<Location> {
@@ -309,9 +311,9 @@ module Cfg implements BB::CfgSig<Location> {
309311

310312
class BasicBlock = BasicBlockAlias;
311313

314+
class EntryBasicBlock = EntryBasicBlockAlias;
315+
312316
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) {
313317
BasicBlocksImpl::dominatingEdge(bb1, bb2)
314318
}
315-
316-
predicate entryBlock(BasicBlock bb) { bb instanceof EntryBasicBlock }
317319
}

rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module Cfg implements BB::CfgSig<Location> {
2525

2626
class BasicBlock = BasicBlocksImpl::BasicBlock;
2727

28-
predicate dominatingEdge = BasicBlocksImpl::dominatingEdge/2;
28+
class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock;
2929

30-
predicate entryBlock(BasicBlock bb) { bb instanceof EntryBasicBlock }
30+
predicate dominatingEdge = BasicBlocksImpl::dominatingEdge/2;
3131
}

0 commit comments

Comments
 (0)