Skip to content

Commit 9ad1749

Browse files
committed
Swift: Hide OpenExistentialExpr from the AST instead.
1 parent 76db1c5 commit 9ad1749

File tree

8 files changed

+30
-55
lines changed

8 files changed

+30
-55
lines changed

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

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1729,22 +1729,10 @@ 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-
17441732
module Conversions {
17451733
class ConversionOrIdentity =
17461734
Synth::TIdentityExpr or Synth::TExplicitCastExpr or Synth::TImplicitConversionExpr or
1747-
Synth::TInOutExpr;
1735+
Synth::TInOutExpr or Synth::TOpenExistentialExpr;
17481736

17491737
abstract class ConversionOrIdentityTree extends AstStandardPostOrderTree {
17501738
ConversionOrIdentityTree() { ast instanceof ConversionOrIdentity }
@@ -1781,6 +1769,12 @@ module Exprs {
17811769

17821770
override predicate convertsFrom(Expr e) { ast.convertsFrom(e) }
17831771
}
1772+
1773+
private class OpenExistentialTree extends ConversionOrIdentityTree {
1774+
override OpenExistentialExpr ast;
1775+
1776+
override predicate convertsFrom(Expr e) { ast.convertsFrom(e) }
1777+
}
17841778
}
17851779
}
17861780

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,6 @@ 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
253250
// flow from Expr to Pattern
254251
exists(Expr e, Pattern p |
255252
nodeFrom.asExpr() = e and

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

Lines changed: 3 additions & 2 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,13 +7208,12 @@ 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: 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
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
72187217
# 112| getElement(1): [CallExpr] call to sink(arg:)
72197218
# 112| getFunction(): [DeclRefExpr] sink(arg:)
72207219
# 112| getArgument(0): [Argument] arg: call to source()
@@ -7224,14 +7223,12 @@ statements.swift:
72247223
# 112| getMethodRef(): [DeclRefExpr] source()
72257224
# 113| getElement(2): [CallExpr] call to sink(arg:)
72267225
# 113| getFunction(): [DeclRefExpr] sink(arg:)
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()
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
72357232
# 114| getElement(3): [CallExpr] call to sink(arg:)
72367233
# 114| getFunction(): [DeclRefExpr] sink(arg:)
72377234
# 114| getArgument(0): [Argument] arg: call to source()
@@ -7240,3 +7237,6 @@ statements.swift:
72407237
# 114| getBase(): [CallExpr] call to getMyProtocolImpl()
72417238
# 114| getFunction(): [DeclRefExpr] getMyProtocolImpl()
72427239
# 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: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6319,17 +6319,14 @@ cfg.swift:
63196319
#-----| -> sink(arg:)
63206320

63216321
# 554| sink(arg:)
6322-
#-----| -> x
6322+
#-----| -> .source()
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-
63336330
# 554| .source()
63346331
#-----| -> OpaqueValueExpr
63356332

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

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

63606357
# 556| call to sink(arg:)
63616358
#-----| -> sink(arg:)
63626359

6363-
# 556| getMyProtocol()
6364-
#-----| -> call to getMyProtocol()
6365-
63666360
# 556| OpaqueValueExpr
63676361
#-----| -> call to source()
63686362

6369-
# 556| call to getMyProtocol()
6370-
#-----| -> .source()
6371-
63726363
# 556| .source()
63736364
#-----| -> OpaqueValueExpr
63746365

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -558,8 +558,6 @@ 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 |
563561
nodes
564562
| file://:0:0:0:0 | .a [x] | semmle.label | .a [x] |
565563
| file://:0:0:0:0 | .s [x] | semmle.label | .s [x] |
@@ -1161,10 +1159,8 @@ nodes
11611159
| test.swift:873:21:873:31 | [...] [Collection element] | semmle.label | [...] [Collection element] |
11621160
| test.swift:873:21:873:31 | [...] [Collection element] | semmle.label | [...] [Collection element] |
11631161
| 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 |
11651162
| test.swift:888:12:888:21 | call to source() | semmle.label | call to source() |
11661163
| 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 |
11681164
| test.swift:890:12:890:35 | call to source() | semmle.label | call to source() |
11691165
| test.swift:891:12:891:39 | call to source() | semmle.label | call to source() |
11701166
subpaths
@@ -1356,7 +1352,7 @@ subpaths
13561352
| test.swift:859:15:859:21 | ...[...] | test.swift:873:24:873:31 | call to source() | test.swift:859:15:859:21 | ...[...] | result |
13571353
| test.swift:860:15:860:21 | ...[...] | test.swift:873:24:873:31 | call to source() | test.swift:860:15:860:21 | ...[...] | result |
13581354
| test.swift:867:15:867:38 | \\...[...] | test.swift:873:24:873:31 | call to source() | test.swift:867:15:867:38 | \\...[...] | 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 |
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 |
13601356
| 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 |
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 |
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 |
13621358
| 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: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,9 +1093,5 @@
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) |
10981096
| test.swift:887:45:887:48 | SSA def(y) | test.swift:889:12:889:12 | y |
10991097
| 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-
failures
21
testFailures
2+
failures

0 commit comments

Comments
 (0)