Skip to content

Commit 7a6078c

Browse files
committed
[NFC] Add tests
1 parent db24b6f commit 7a6078c

File tree

3 files changed

+105
-0
lines changed

3 files changed

+105
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// RUN: %target-swift-frontend %s -emit-sil \
2+
// RUN: -sil-verify-all | %FileCheck %s
3+
4+
// REQUIRES: swift_in_compiler
5+
6+
public protocol OptionalType<Wrapped> {
7+
associatedtype Wrapped
8+
9+
static func some(_ wrapped: Wrapped) -> Self
10+
static func somePair(_ wrapped1: Wrapped, _ wrapped2: Wrapped) -> Self
11+
static func esc(_ e: E) -> Self
12+
}
13+
14+
public struct E {}
15+
16+
public enum FakeOptional<Wrapped : ~Escapable & ~Copyable> : ~Escapable & ~Copyable {
17+
case none
18+
case some(Wrapped)
19+
case somePair(Wrapped, Wrapped)
20+
case esc(E)
21+
}
22+
23+
extension FakeOptional: Copyable where Wrapped: Copyable & ~Escapable {}
24+
25+
extension FakeOptional: Escapable where Wrapped: Escapable & ~Copyable {}
26+
27+
extension FakeOptional : OptionalType {}
28+
29+
// CHECK-LABEL: sil shared [transparent] @$s25lifetime_dependence_enums12FakeOptionalO4someyACyxGxcAEmlF : $@convention(method) <Wrapped where Wrapped : ~Copyable, Wrapped : ~Escapable> (@in Wrapped, @thin FakeOptional<Wrapped>.Type) -> @lifetime(copy 0) @out FakeOptional<Wrapped> {
30+
31+
// CHECK-LABEL: sil shared [transparent] @$s25lifetime_dependence_enums12FakeOptionalO8somePairyACyxGx_xtcAEmlF : $@convention(method) <Wrapped where Wrapped : ~Copyable, Wrapped : ~Escapable> (@in Wrapped, @in Wrapped, @thin FakeOptional<Wrapped>.Type) -> @lifetime(copy 0, copy 1) @out FakeOptional<Wrapped> {
32+
33+
// CHECK-LABEL: sil shared [transparent] @$s25lifetime_dependence_enums12FakeOptionalO3escyACyxGAA1EVcAEmlF : $@convention(method) <Wrapped where Wrapped : ~Copyable, Wrapped : ~Escapable> (E, @thin FakeOptional<Wrapped>.Type) -> @out FakeOptional<Wrapped> {
34+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
public protocol OptionalType<Wrapped> {
2+
associatedtype Wrapped
3+
4+
static func some(_ wrapped: Wrapped) -> Self
5+
static func somePair(_ wrapped1: Wrapped, _ wrapped2: Wrapped) -> Self
6+
static func esc(_ e: E) -> Self
7+
}
8+
9+
public struct E {}
10+
11+
public enum FakeOptional<Wrapped : ~Escapable & ~Copyable> : ~Escapable & ~Copyable {
12+
case none
13+
case some(Wrapped)
14+
case somePair(Wrapped, Wrapped)
15+
case esc(E)
16+
}
17+
18+
extension FakeOptional: Copyable where Wrapped: Copyable & ~Escapable {}
19+
20+
extension FakeOptional: Escapable where Wrapped: Escapable & ~Copyable {}
21+
22+
extension FakeOptional : OptionalType {}
23+
24+
// CHECK-LABEL: sil shared [transparent] @$s25lifetime_dependence_enums12FakeOptionalO4someyACyxGxcAEmlF : $@convention(method) <Wrapped where Wrapped : ~Copyable, Wrapped : ~Escapable> (@in Wrapped, @thin FakeOptional<Wrapped>.Type) -> @lifetime(copy 0) @out FakeOptional<Wrapped> {
25+
26+
// CHECK-LABEL: sil shared [transparent] @$s25lifetime_dependence_enums12FakeOptionalO8somePairyACyxGx_xtcAEmlF : $@convention(method) <Wrapped where Wrapped : ~Copyable, Wrapped : ~Escapable> (@in Wrapped, @in Wrapped, @thin FakeOptional<Wrapped>.Type) -> @lifetime(copy 0, copy 1) @out FakeOptional<Wrapped> {
27+
28+
// CHECK-LABEL: sil shared [transparent] @$s25lifetime_dependence_enums12FakeOptionalO3escyACyxGAA1EVcAEmlF : $@convention(method) <Wrapped where Wrapped : ~Copyable, Wrapped : ~Escapable> (E, @thin FakeOptional<Wrapped>.Type) -> @out FakeOptional<Wrapped> {
29+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend -emit-module -o %t %S/Inputs/def_lifetime_dependence_enums.swift
3+
4+
// RUN: llvm-bcanalyzer %t/def_lifetime_dependence_enums.swiftmodule
5+
6+
// RUN: %target-swift-frontend -c -module-name lifetime-dependence-enums -Xllvm -sil-print-after=EarlyPerfInliner -O -I %t %s \
7+
// RUN: -enable-experimental-feature Lifetimes -o /dev/null 2>&1 | %FileCheck %s
8+
9+
// REQUIRES: swift_feature_Lifetimes
10+
11+
import def_lifetime_dependence_enums
12+
13+
@inline(__always)
14+
public func testSome<T : OptionalType>(_ t: T, _ w: T.Wrapped) -> T {
15+
return T.self.some(w)
16+
}
17+
18+
@inline(__always)
19+
public func testSomePair<T : OptionalType>(_ t: T, _ w: T.Wrapped) -> T {
20+
return T.self.somePair(w, w)
21+
}
22+
23+
// CHECK-LABEL: sil [ossa] @$s4main5test1yQr29def_lifetime_dependence_enums12FakeOptionalOyxG_xtlF :
24+
// Match the second instance of EarlyPerfInliner
25+
// CHECK-LABEL: sil [ossa] @$s4main5test1yQr29def_lifetime_dependence_enums12FakeOptionalOyxG_xtlF :
26+
// CHECK: [[FUNC:%.*]] = function_ref @$s29def_lifetime_dependence_enums12FakeOptionalO4someyACyxGxcAEmlF : $@convention(method) <τ_0_0 where τ_0_0 : ~Copyable, τ_0_0 : ~Escapable> (@in τ_0_0, @thin FakeOptional<τ_0_0>.Type) -> @lifetime(copy 0) @out FakeOptional<τ_0_0>
27+
// CHECK: apply [[FUNC]]<W>({{.*}}) : $@convention(method) <τ_0_0 where τ_0_0 : ~Copyable, τ_0_0 : ~Escapable> (@in τ_0_0, @thin FakeOptional<τ_0_0>.Type) -> @lifetime(copy 0) @out FakeOptional<τ_0_0>
28+
// CHECK-LABEL: } // end sil function '$s4main5test1yQr29def_lifetime_dependence_enums12FakeOptionalOyxG_xtlF'
29+
public func test1<W>(_ f: FakeOptional<W>, _ w: FakeOptional<W>.Wrapped) -> some OptionalType {
30+
return testSome(f, w)
31+
}
32+
33+
// CHECK-LABEL: sil [ossa] @$s4main5test2yQr29def_lifetime_dependence_enums12FakeOptionalOyxG_xtlF :
34+
// Match the second instance of EarlyPerfInliner
35+
// CHECK-LABEL: sil [ossa] @$s4main5test2yQr29def_lifetime_dependence_enums12FakeOptionalOyxG_xtlF :
36+
// CHECK: [[FUNC:%.*]] = function_ref @$s29def_lifetime_dependence_enums12FakeOptionalO8somePairyACyxGx_xtcAEmlF : $@convention(method) <τ_0_0 where τ_0_0 : ~Copyable, τ_0_0 : ~Escapable> (@in τ_0_0, @in τ_0_0, @thin FakeOptional<τ_0_0>.Type) -> @lifetime(copy 0, copy 1) @out FakeOptional<τ_0_0> // user: %13
37+
// CHECK: apply [[FUNC]]<W>({{.*}}) : $@convention(method) <τ_0_0 where τ_0_0 : ~Copyable, τ_0_0 : ~Escapable> (@in τ_0_0, @in τ_0_0, @thin FakeOptional<τ_0_0>.Type) -> @lifetime(copy 0, copy 1) @out FakeOptional<τ_0_0>
38+
// CHECK-LABEL: } // end sil function '$s4main5test2yQr29def_lifetime_dependence_enums12FakeOptionalOyxG_xtlF'
39+
public func test2<W>(_ f: FakeOptional<W>, _ w: FakeOptional<W>.Wrapped) -> some OptionalType {
40+
return testSomePair(f, w)
41+
}
42+

0 commit comments

Comments
 (0)