Skip to content

Commit 09a5fde

Browse files
author
Dave Bartolomeo
committed
Clean up SemanticCFG
1 parent 04fae43 commit 09a5fde

6 files changed

Lines changed: 30 additions & 24 deletions

File tree

java/ql/lib/semmle/code/java/semantic/SemanticCFG.qll

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,12 @@
44

55
private import java
66
private import SemanticExpr
7-
private import SemanticExprSpecific
7+
private import SemanticCFGSpecific::SemanticCFGConfig as Specific
88

9-
private newtype TSemBasicBlock = MkSemBasicBlock(BasicBlock block)
9+
class SemBasicBlock extends Specific::BasicBlock {
10+
final predicate bbDominates(SemBasicBlock otherBlock) { Specific::bbDominates(this, otherBlock) }
1011

11-
class SemBasicBlock extends TSemBasicBlock {
12-
BasicBlock block;
12+
final predicate hasDominanceInformation() { Specific::hasDominanceInformation(this) }
1313

14-
SemBasicBlock() { this = MkSemBasicBlock(block) }
15-
16-
final string toString() { result = block.toString() }
17-
18-
final Location getLocation() { result = block.getLocation() }
19-
20-
final predicate bbDominates(SemBasicBlock otherBlock) {
21-
block.bbDominates(getJavaBasicBlock(otherBlock))
22-
}
23-
24-
final SemExpr getAnExpr() { SemanticExprConfig::getExprBasicBlock(result) = this }
25-
}
26-
27-
SemBasicBlock getSemanticBasicBlock(BasicBlock block) { result = MkSemBasicBlock(block) }
28-
29-
BasicBlock getJavaBasicBlock(SemBasicBlock block) { block = getSemanticBasicBlock(result) }
30-
31-
predicate semHasDominanceInformation(SemBasicBlock bb) {
32-
hasDominanceInformation(getJavaBasicBlock(bb))
14+
final SemExpr getAnExpr() { result.getBasicBlock() = this }
3315
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
private import java as J
2+
private import SemanticCFG
3+
4+
module SemanticCFGConfig {
5+
class BasicBlock instanceof J::BasicBlock {
6+
final string toString() { result = this.(J::BasicBlock).toString() }
7+
8+
final J::Location getLocation() { result = this.(J::BasicBlock).getLocation() }
9+
}
10+
11+
predicate bbDominates(BasicBlock dominator, BasicBlock dominated) {
12+
dominator.(J::BasicBlock).bbDominates(dominated.(J::BasicBlock))
13+
}
14+
15+
predicate hasDominanceInformation(BasicBlock block) { J::hasDominanceInformation(block) }
16+
}
17+
18+
SemBasicBlock getSemanticBasicBlock(J::BasicBlock block) { result = block }
19+
20+
J::BasicBlock getJavaBasicBlock(SemBasicBlock block) { block = getSemanticBasicBlock(result) }

java/ql/lib/semmle/code/java/semantic/SemanticExprSpecific.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
private import java as J
22
private import SemanticCFG
33
private import SemanticExpr
4+
private import SemanticCFGSpecific
45
private import SemanticSSA
56
private import SemanticType
67
private import semmle.code.java.dataflow.SSA as SSA

java/ql/lib/semmle/code/java/semantic/SemanticGuard.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ private import java
66
private import semmle.code.java.controlflow.Guards
77
private import semmle.code.java.controlflow.internal.GuardsLogic
88
private import SemanticCFG
9+
private import SemanticCFGSpecific
910
private import SemanticExpr
1011
private import SemanticExprSpecific
1112
private import SemanticSSA

java/ql/lib/semmle/code/java/semantic/SemanticSSA.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ private import SemanticExpr
99
private import SemanticType
1010
private import semmle.code.java.dataflow.internal.rangeanalysis.SsaReadPositionCommon
1111
private import SemanticExprSpecific
12+
private import SemanticCFGSpecific
1213

1314
private newtype TSemSsaVariable = MkSemSsaVariable(SSA::SsaVariable var)
1415

@@ -118,6 +119,6 @@ predicate semBackEdge(SemSsaPhiNode phi, SemSsaVariable inp, SemSsaReadPositionP
118119
// Conservatively assume that every edge is a back edge if we don't have dominance information.
119120
(
120121
phi.getBasicBlock().bbDominates(edge.getOrigBlock()) or
121-
not semHasDominanceInformation(edge.getOrigBlock())
122+
not edge.getOrigBlock().hasDominanceInformation()
122123
)
123124
}

java/ql/test/library-tests/dataflow/sign-analysis/diff.ql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import java
22
import semmle.code.java.dataflow.SignAnalysis
33
import semmle.code.java.semantic.analysis.SignAnalysisCommon
44
import semmle.code.java.semantic.SemanticCFG
5+
import semmle.code.java.semantic.SemanticCFGSpecific
56
import semmle.code.java.semantic.SemanticExpr
67
import semmle.code.java.semantic.SemanticExprSpecific
78
import semmle.code.java.semantic.SemanticSSA

0 commit comments

Comments
 (0)