Revert "Swift: Hide OpenExistentialExpr from the AST instead."

This reverts commit 9ad1749957.
This commit is contained in:
Geoffrey White
2023-10-16 10:49:39 +01:00
parent 9ad1749957
commit 0e1da37379
8 changed files with 55 additions and 30 deletions

View File

@@ -1729,10 +1729,22 @@ module Exprs {
}
}
private class OpenExistentialTree extends AstStandardPostOrderTree {
override OpenExistentialExpr ast;
override ControlFlowElement getChildElement(int i) {
i = 0 and
result.asAstNode() = ast.getExistential().getFullyConverted()
or
i = 1 and
result.asAstNode() = ast.getSubExpr().getFullyConverted()
}
}
module Conversions {
class ConversionOrIdentity =
Synth::TIdentityExpr or Synth::TExplicitCastExpr or Synth::TImplicitConversionExpr or
Synth::TInOutExpr or Synth::TOpenExistentialExpr;
Synth::TInOutExpr;
abstract class ConversionOrIdentityTree extends AstStandardPostOrderTree {
ConversionOrIdentityTree() { ast instanceof ConversionOrIdentity }
@@ -1769,12 +1781,6 @@ module Exprs {
override predicate convertsFrom(Expr e) { ast.convertsFrom(e) }
}
private class OpenExistentialTree extends ConversionOrIdentityTree {
override OpenExistentialExpr ast;
override predicate convertsFrom(Expr e) { ast.convertsFrom(e) }
}
}
}

View File

@@ -247,6 +247,9 @@ private module Cached {
nodeFrom.asExpr() = ie.getBranch(_)
)
or
// flow through OpenExistentialExpr (compiler generated expression wrapper)
nodeFrom.asExpr() = nodeTo.asExpr().(OpenExistentialExpr).getSubExpr()
or
// flow from Expr to Pattern
exists(Expr e, Pattern p |
nodeFrom.asExpr() = e and

View File

@@ -1,5 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.OpenExistentialExpr
class OpenExistentialExpr extends Generated::OpenExistentialExpr {
override predicate convertsFrom(Expr e) { e = this.getImmediateSubExpr() }
}
class OpenExistentialExpr extends Generated::OpenExistentialExpr { }

View File

@@ -7208,12 +7208,13 @@ statements.swift:
# 110| getBody(): [BraceStmt] { ... }
# 111| getElement(0): [CallExpr] call to sink(arg:)
# 111| getFunction(): [DeclRefExpr] sink(arg:)
# 111| getArgument(0): [Argument] arg: call to source()
# 111| getExpr(): [CallExpr] call to source()
# 111| getFunction(): [MethodLookupExpr] .source()
# 111| getBase(): [OpaqueValueExpr] OpaqueValueExpr
# 111| getMethodRef(): [DeclRefExpr] source()
# 111| getExpr().getFullyConverted(): [OpenExistentialExpr] OpenExistentialExpr
# 111| getArgument(0): [Argument] arg: OpenExistentialExpr
# 111| getExpr(): [OpenExistentialExpr] OpenExistentialExpr
# 111| getSubExpr(): [CallExpr] call to source()
# 111| getFunction(): [MethodLookupExpr] .source()
# 111| getBase(): [OpaqueValueExpr] OpaqueValueExpr
# 111| getMethodRef(): [DeclRefExpr] source()
# 111| getExistential(): [DeclRefExpr] x
# 112| getElement(1): [CallExpr] call to sink(arg:)
# 112| getFunction(): [DeclRefExpr] sink(arg:)
# 112| getArgument(0): [Argument] arg: call to source()
@@ -7223,12 +7224,14 @@ statements.swift:
# 112| getMethodRef(): [DeclRefExpr] source()
# 113| getElement(2): [CallExpr] call to sink(arg:)
# 113| getFunction(): [DeclRefExpr] sink(arg:)
# 113| getArgument(0): [Argument] arg: call to source()
# 113| getExpr(): [CallExpr] call to source()
# 113| getFunction(): [MethodLookupExpr] .source()
# 113| getBase(): [OpaqueValueExpr] OpaqueValueExpr
# 113| getMethodRef(): [DeclRefExpr] source()
# 113| getExpr().getFullyConverted(): [OpenExistentialExpr] OpenExistentialExpr
# 113| getArgument(0): [Argument] arg: OpenExistentialExpr
# 113| getExpr(): [OpenExistentialExpr] OpenExistentialExpr
# 113| getSubExpr(): [CallExpr] call to source()
# 113| getFunction(): [MethodLookupExpr] .source()
# 113| getBase(): [OpaqueValueExpr] OpaqueValueExpr
# 113| getMethodRef(): [DeclRefExpr] source()
# 113| getExistential(): [CallExpr] call to getMyProtocol()
# 113| getFunction(): [DeclRefExpr] getMyProtocol()
# 114| getElement(3): [CallExpr] call to sink(arg:)
# 114| getFunction(): [DeclRefExpr] sink(arg:)
# 114| getArgument(0): [Argument] arg: call to source()
@@ -7237,6 +7240,3 @@ statements.swift:
# 114| getBase(): [CallExpr] call to getMyProtocolImpl()
# 114| getFunction(): [DeclRefExpr] getMyProtocolImpl()
# 114| getMethodRef(): [DeclRefExpr] source()
# 111| [DeclRefExpr] x
# 113| [CallExpr] call to getMyProtocol()
# 113| getFunction(): [DeclRefExpr] getMyProtocol()

View File

@@ -6319,7 +6319,7 @@ cfg.swift:
#-----| -> sink(arg:)
# 554| sink(arg:)
#-----| -> .source()
#-----| -> x
# 554| call to sink(arg:)
#-----| -> sink(arg:)
@@ -6327,6 +6327,9 @@ cfg.swift:
# 554| OpaqueValueExpr
#-----| -> call to source()
# 554| x
#-----| -> .source()
# 554| .source()
#-----| -> OpaqueValueExpr
@@ -6352,14 +6355,20 @@ cfg.swift:
#-----| -> call to sink(arg:)
# 556| sink(arg:)
#-----| -> .source()
#-----| -> getMyProtocol()
# 556| call to sink(arg:)
#-----| -> sink(arg:)
# 556| getMyProtocol()
#-----| -> call to getMyProtocol()
# 556| OpaqueValueExpr
#-----| -> call to source()
# 556| call to getMyProtocol()
#-----| -> .source()
# 556| .source()
#-----| -> OpaqueValueExpr

View File

@@ -558,6 +558,8 @@ edges
| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:856:29:856:40 | args [Collection element] |
| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:873:21:873:31 | [...] [Collection element] |
| test.swift:873:24:873:31 | call to source() | test.swift:873:21:873:31 | [...] [Collection element] |
| test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | OpenExistentialExpr |
| test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | OpenExistentialExpr |
nodes
| file://:0:0:0:0 | .a [x] | semmle.label | .a [x] |
| file://:0:0:0:0 | .s [x] | semmle.label | .s [x] |
@@ -1159,8 +1161,10 @@ nodes
| test.swift:873:21:873:31 | [...] [Collection element] | semmle.label | [...] [Collection element] |
| test.swift:873:21:873:31 | [...] [Collection element] | semmle.label | [...] [Collection element] |
| test.swift:873:24:873:31 | call to source() | semmle.label | call to source() |
| test.swift:888:12:888:21 | OpenExistentialExpr | semmle.label | OpenExistentialExpr |
| test.swift:888:12:888:21 | call to source() | semmle.label | call to source() |
| test.swift:889:12:889:21 | call to source() | semmle.label | call to source() |
| test.swift:890:12:890:35 | OpenExistentialExpr | semmle.label | OpenExistentialExpr |
| test.swift:890:12:890:35 | call to source() | semmle.label | call to source() |
| test.swift:891:12:891:39 | call to source() | semmle.label | call to source() |
subpaths
@@ -1352,7 +1356,7 @@ subpaths
| test.swift:859:15:859:21 | ...[...] | test.swift:873:24:873:31 | call to source() | test.swift:859:15:859:21 | ...[...] | result |
| test.swift:860:15:860:21 | ...[...] | test.swift:873:24:873:31 | call to source() | test.swift:860:15:860:21 | ...[...] | result |
| test.swift:867:15:867:38 | \\...[...] | test.swift:873:24:873:31 | call to source() | test.swift:867:15:867:38 | \\...[...] | result |
| 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 |
| test.swift:888:12:888:21 | OpenExistentialExpr | test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | OpenExistentialExpr | result |
| 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 |
| 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 |
| test.swift:890:12:890:35 | OpenExistentialExpr | test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | OpenExistentialExpr | result |
| 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 |

View File

@@ -1093,5 +1093,9 @@
| test.swift:880:7:880:7 | self | test.swift:880:7:880:7 | SSA def(self) |
| test.swift:881:7:881:7 | SSA def(self) | test.swift:881:2:881:34 | self[return] |
| test.swift:881:7:881:7 | self | test.swift:881:7:881:7 | SSA def(self) |
| test.swift:887:30:887:33 | SSA def(x) | test.swift:888:12:888:12 | x |
| test.swift:887:30:887:33 | x | test.swift:887:30:887:33 | SSA def(x) |
| test.swift:887:45:887:48 | SSA def(y) | test.swift:889:12:889:12 | y |
| test.swift:887:45:887:48 | y | test.swift:887:45:887:48 | SSA def(y) |
| test.swift:888:12:888:21 | call to source() | test.swift:888:12:888:21 | OpenExistentialExpr |
| test.swift:890:12:890:35 | call to source() | test.swift:890:12:890:35 | OpenExistentialExpr |

View File

@@ -1,2 +1,2 @@
testFailures
failures
testFailures