Skip to content

Commit 3677522

Browse files
authored
Merge pull request #10064 from MathiasVP/fix-ssa-for-getters
Swift: Fix SSA for calls to getter functions
2 parents d02ad51 + cbb1108 commit 3677522

File tree

1 file changed

+9
-3
lines changed
  • swift/ql/lib/codeql/swift/dataflow

1 file changed

+9
-3
lines changed

swift/ql/lib/codeql/swift/dataflow/Ssa.qll

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ module Ssa {
6161
* to the underlying variable.
6262
*/
6363
cached
64-
predicate assigns(ExprCfgNode value) {
64+
predicate assigns(CfgNode value) {
6565
exists(
6666
AssignExpr a, BasicBlock bb, int i // TODO: use CFG node for assignment expr
6767
|
@@ -70,15 +70,21 @@ module Ssa {
7070
value.getNode().asAstNode() = a.getSource()
7171
)
7272
or
73-
exists(VarDecl var, BasicBlock bb, int blockIndex, PatternBindingDecl pbd |
73+
exists(VarDecl var, BasicBlock bb, int blockIndex, PatternBindingDecl pbd, Expr init |
7474
this.definesAt(var, bb, blockIndex) and
7575
pbd.getAPattern() = bb.getNode(blockIndex).getNode().asAstNode() and
76-
value.getNode().asAstNode() = var.getParentInitializer()
76+
init = var.getParentInitializer()
77+
|
78+
value.getNode().asAstNode() = init
79+
or
80+
// TODO: We should probably enumerate more cfg nodes here.
81+
value.(PropertyGetterCfgNode).getRef() = init
7782
)
7883
}
7984

8085
cached
8186
predicate isInoutDef(ExprCfgNode argument) {
87+
// TODO: This should probably not be only `ExprCfgNode`s.
8288
exists(
8389
ApplyExpr c, BasicBlock bb, int blockIndex, int argIndex, VarDecl v, InOutExpr argExpr // TODO: use CFG node for assignment expr
8490
|

0 commit comments

Comments
 (0)