Skip to content

Commit 0e1da37

Browse files
committed
Revert "Swift: Hide OpenExistentialExpr from the AST instead."
This reverts commit 9ad1749.
1 parent 9ad1749 commit 0e1da37

File tree

8 files changed

+55
-30
lines changed

8 files changed

+55
-30
lines changed

swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1729,10 +1729,22 @@ module Exprs {
17291729
}
17301730
}
17311731

1732+
private class OpenExistentialTree extends AstStandardPostOrderTree {
1733+
override OpenExistentialExpr ast;
1734+
1735+
override ControlFlowElement getChildElement(int i) {
1736+
i = 0 and
1737+
result.asAstNode() = ast.getExistential().getFullyConverted()
1738+
or
1739+
i = 1 and
1740+
result.asAstNode() = ast.getSubExpr().getFullyConverted()
1741+
}
1742+
}
1743+
17321744
module Conversions {
17331745
class ConversionOrIdentity =
17341746
Synth::TIdentityExpr or Synth::TExplicitCastExpr or Synth::TImplicitConversionExpr or
1735-
Synth::TInOutExpr or Synth::TOpenExistentialExpr;
1747+
Synth::TInOutExpr;
17361748

17371749
abstract class ConversionOrIdentityTree extends AstStandardPostOrderTree {
17381750
ConversionOrIdentityTree() { ast instanceof ConversionOrIdentity }
@@ -1769,12 +1781,6 @@ module Exprs {
17691781

17701782
override predicate convertsFrom(Expr e) { ast.convertsFrom(e) }
17711783
}
1772-
1773-
private class OpenExistentialTree extends ConversionOrIdentityTree {
1774-
override OpenExistentialExpr ast;
1775-
1776-
override predicate convertsFrom(Expr e) { ast.convertsFrom(e) }
1777-
}
17781784
}
17791785
}
17801786

swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ private module Cached {
247247
nodeFrom.asExpr() = ie.getBranch(_)
248248
)
249249
or
250+
// flow through OpenExistentialExpr (compiler generated expression wrapper)
251+
nodeFrom.asExpr() = nodeTo.asExpr().(OpenExistentialExpr).getSubExpr()
252+
or
250253
// flow from Expr to Pattern
251254
exists(Expr e, Pattern p |
252255
nodeFrom.asExpr() = e and

swift/ql/lib/codeql/swift/elements/expr/OpenExistentialExpr.qll

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

swift/ql/test/library-tests/ast/PrintAst.expected

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7208,12 +7208,13 @@ statements.swift:
72087208
# 110| getBody(): [BraceStmt] { ... }
72097209
# 111| getElement(0): [CallExpr] call to sink(arg:)
72107210
# 111| getFunction(): [DeclRefExpr] sink(arg:)
7211-
# 111| getArgument(0): [Argument] arg: call to source()
7212-
# 111| getExpr(): [CallExpr] call to source()
7213-
# 111| getFunction(): [MethodLookupExpr] .source()
7214-
# 111| getBase(): [OpaqueValueExpr] OpaqueValueExpr
7215-
# 111| getMethodRef(): [DeclRefExpr] source()
7216-
# 111| getExpr().getFullyConverted(): [OpenExistentialExpr] OpenExistentialExpr
7211+
# 111| getArgument(0): [Argument] arg: OpenExistentialExpr
7212+
# 111| getExpr(): [OpenExistentialExpr] OpenExistentialExpr
7213+
# 111| getSubExpr(): [CallExpr] call to source()
7214+
# 111| getFunction(): [MethodLookupExpr] .source()
7215+
# 111| getBase(): [OpaqueValueExpr] OpaqueValueExpr
7216+
# 111| getMethodRef(): [DeclRefExpr] source()
7217+
# 111| getExistential(): [DeclRefExpr] x
72177218
# 112| getElement(1): [CallExpr] call to sink(arg:)
72187219
# 112| getFunction(): [DeclRefExpr] sink(arg:)
72197220
# 112| getArgument(0): [Argument] arg: call to source()
@@ -7223,12 +7224,14 @@ statements.swift:
72237224
# 112| getMethodRef(): [DeclRefExpr] source()
72247225
# 113| getElement(2): [CallExpr] call to sink(arg:)
72257226
# 113| getFunction(): [DeclRefExpr] sink(arg:)
7226-
# 113| getArgument(0): [Argument] arg: call to source()
7227-
# 113| getExpr(): [CallExpr] call to source()
7228-
# 113| getFunction(): [MethodLookupExpr] .source()
7229-
# 113| getBase(): [OpaqueValueExpr] OpaqueValueExpr
7230-
# 113| getMethodRef(): [DeclRefExpr] source()
7231-
# 113| getExpr().getFullyConverted(): [OpenExistentialExpr] OpenExistentialExpr
7227+
# 113| getArgument(0): [Argument] arg: OpenExistentialExpr
7228+
# 113| getExpr(): [OpenExistentialExpr] OpenExistentialExpr
7229+
# 113| getSubExpr(): [CallExpr] call to source()
7230+
# 113| getFunction(): [MethodLookupExpr] .source()
7231+
# 113| getBase(): [OpaqueValueExpr] OpaqueValueExpr
7232+
# 113| getMethodRef(): [DeclRefExpr] source()
7233+
# 113| getExistential(): [CallExpr] call to getMyProtocol()
7234+
# 113| getFunction(): [DeclRefExpr] getMyProtocol()
72327235
# 114| getElement(3): [CallExpr] call to sink(arg:)
72337236
# 114| getFunction(): [DeclRefExpr] sink(arg:)
72347237
# 114| getArgument(0): [Argument] arg: call to source()
@@ -7237,6 +7240,3 @@ statements.swift:
72377240
# 114| getBase(): [CallExpr] call to getMyProtocolImpl()
72387241
# 114| getFunction(): [DeclRefExpr] getMyProtocolImpl()
72397242
# 114| getMethodRef(): [DeclRefExpr] source()
7240-
# 111| [DeclRefExpr] x
7241-
# 113| [CallExpr] call to getMyProtocol()
7242-
# 113| getFunction(): [DeclRefExpr] getMyProtocol()

swift/ql/test/library-tests/controlflow/graph/Cfg.expected

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6319,14 +6319,17 @@ cfg.swift:
63196319
#-----| -> sink(arg:)
63206320

63216321
# 554| sink(arg:)
6322-
#-----| -> .source()
6322+
#-----| -> x
63236323

63246324
# 554| call to sink(arg:)
63256325
#-----| -> sink(arg:)
63266326

63276327
# 554| OpaqueValueExpr
63286328
#-----| -> call to source()
63296329

6330+
# 554| x
6331+
#-----| -> .source()
6332+
63306333
# 554| .source()
63316334
#-----| -> OpaqueValueExpr
63326335

@@ -6352,14 +6355,20 @@ cfg.swift:
63526355
#-----| -> call to sink(arg:)
63536356

63546357
# 556| sink(arg:)
6355-
#-----| -> .source()
6358+
#-----| -> getMyProtocol()
63566359

63576360
# 556| call to sink(arg:)
63586361
#-----| -> sink(arg:)
63596362

6363+
# 556| getMyProtocol()
6364+
#-----| -> call to getMyProtocol()
6365+
63606366
# 556| OpaqueValueExpr
63616367
#-----| -> call to source()
63626368

6369+
# 556| call to getMyProtocol()
6370+
#-----| -> .source()
6371+
63636372
# 556| .source()
63646373
#-----| -> OpaqueValueExpr
63656374

swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,8 @@ edges
558558
| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:856:29:856:40 | args [Collection element] |
559559
| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:873:21:873:31 | [...] [Collection element] |
560560
| test.swift:873:24:873:31 | call to source() | test.swift:873:21:873:31 | [...] [Collection element] |
561+
| test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | OpenExistentialExpr |
562+
| test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | OpenExistentialExpr |
561563
nodes
562564
| file://:0:0:0:0 | .a [x] | semmle.label | .a [x] |
563565
| file://:0:0:0:0 | .s [x] | semmle.label | .s [x] |
@@ -1159,8 +1161,10 @@ nodes
11591161
| test.swift:873:21:873:31 | [...] [Collection element] | semmle.label | [...] [Collection element] |
11601162
| test.swift:873:21:873:31 | [...] [Collection element] | semmle.label | [...] [Collection element] |
11611163
| test.swift:873:24:873:31 | call to source() | semmle.label | call to source() |
1164+
| test.swift:888:12:888:21 | OpenExistentialExpr | semmle.label | OpenExistentialExpr |
11621165
| test.swift:888:12:888:21 | call to source() | semmle.label | call to source() |
11631166
| test.swift:889:12:889:21 | call to source() | semmle.label | call to source() |
1167+
| test.swift:890:12:890:35 | OpenExistentialExpr | semmle.label | OpenExistentialExpr |
11641168
| test.swift:890:12:890:35 | call to source() | semmle.label | call to source() |
11651169
| test.swift:891:12:891:39 | call to source() | semmle.label | call to source() |
11661170
subpaths
@@ -1352,7 +1356,7 @@ subpaths
13521356
| test.swift:859:15:859:21 | ...[...] | test.swift:873:24:873:31 | call to source() | test.swift:859:15:859:21 | ...[...] | result |
13531357
| test.swift:860:15:860:21 | ...[...] | test.swift:873:24:873:31 | call to source() | test.swift:860:15:860:21 | ...[...] | result |
13541358
| test.swift:867:15:867:38 | \\...[...] | test.swift:873:24:873:31 | call to source() | test.swift:867:15:867:38 | \\...[...] | result |
1355-
| test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | call to source() | result |
1359+
| test.swift:888:12:888:21 | OpenExistentialExpr | test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | OpenExistentialExpr | result |
13561360
| test.swift:889:12:889:21 | call to source() | test.swift:889:12:889:21 | call to source() | test.swift:889:12:889:21 | call to source() | result |
1357-
| test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | call to source() | result |
1361+
| test.swift:890:12:890:35 | OpenExistentialExpr | test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | OpenExistentialExpr | result |
13581362
| test.swift:891:12:891:39 | call to source() | test.swift:891:12:891:39 | call to source() | test.swift:891:12:891:39 | call to source() | result |

swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,5 +1093,9 @@
10931093
| test.swift:880:7:880:7 | self | test.swift:880:7:880:7 | SSA def(self) |
10941094
| test.swift:881:7:881:7 | SSA def(self) | test.swift:881:2:881:34 | self[return] |
10951095
| test.swift:881:7:881:7 | self | test.swift:881:7:881:7 | SSA def(self) |
1096+
| test.swift:887:30:887:33 | SSA def(x) | test.swift:888:12:888:12 | x |
1097+
| test.swift:887:30:887:33 | x | test.swift:887:30:887:33 | SSA def(x) |
10961098
| test.swift:887:45:887:48 | SSA def(y) | test.swift:889:12:889:12 | y |
10971099
| test.swift:887:45:887:48 | y | test.swift:887:45:887:48 | SSA def(y) |
1100+
| test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | OpenExistentialExpr |
1101+
| test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | OpenExistentialExpr |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
testFailures
21
failures
2+
testFailures

0 commit comments

Comments
 (0)