Skip to content

Commit 4bbfa51

Browse files
authored
Merge pull request #6535 from hvitved/csharp/consistency-queries
C#: Add consistency queries
2 parents c8b8a28 + 723ac81 commit 4bbfa51

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

csharp/ql/test/library-tests/controlflow/graph/Consistency.ql renamed to csharp/ql/consistency-queries/CfgConsistency.ql

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,25 @@ import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl
66
import semmle.code.csharp.controlflow.internal.Splitting
77
import Consistency
88

9+
private predicate splitBB(ControlFlow::BasicBlock bb) {
10+
exists(ControlFlow::Node first |
11+
first = bb.getFirstNode() and
12+
first.isJoin() and
13+
strictcount(first.getAPredecessor().getElement()) = 1
14+
)
15+
}
16+
17+
private class RelevantBasicBlock extends ControlFlow::BasicBlock {
18+
RelevantBasicBlock() { not splitBB(this) }
19+
}
20+
921
predicate bbStartInconsistency(ControlFlowElement cfe) {
10-
exists(ControlFlow::BasicBlock bb | bb.getFirstNode() = cfe.getAControlFlowNode()) and
22+
exists(RelevantBasicBlock bb | bb.getFirstNode() = cfe.getAControlFlowNode()) and
1123
not cfe = any(PreBasicBlock bb).getFirstElement()
1224
}
1325

1426
predicate bbSuccInconsistency(ControlFlowElement pred, ControlFlowElement succ) {
15-
exists(ControlFlow::BasicBlock predBB, ControlFlow::BasicBlock succBB |
27+
exists(RelevantBasicBlock predBB, RelevantBasicBlock succBB |
1628
predBB.getLastNode() = pred.getAControlFlowNode() and
1729
succBB = predBB.getASuccessor() and
1830
succBB.getFirstNode() = succ.getAControlFlowNode()
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
name: codeql-csharp-consistency-queries
2+
version: 0.0.0
3+
libraryPathDependencies:
4+
- codeql/csharp-all
5+
- codeql/csharp-queries
6+
extractor: csharp

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,8 @@ module Consistency {
924924
succSplits(pred, predSplits, succ, succSplits, c) and
925925
split.hasEntry(pred, succ, c) and
926926
not split.getKind() = predSplits.getASplit().getKind() and
927-
not split = succSplits.getASplit()
927+
not split = succSplits.getASplit() and
928+
split.getKind().isEnabled(succ)
928929
}
929930

930931
query predicate breakInvariant5(

ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImplShared.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,8 @@ module Consistency {
924924
succSplits(pred, predSplits, succ, succSplits, c) and
925925
split.hasEntry(pred, succ, c) and
926926
not split.getKind() = predSplits.getASplit().getKind() and
927-
not split = succSplits.getASplit()
927+
not split = succSplits.getASplit() and
928+
split.getKind().isEnabled(succ)
928929
}
929930

930931
query predicate breakInvariant5(

0 commit comments

Comments
 (0)