File: existentials.swift

package info (click to toggle)
swiftlang 6.1.3-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,791,644 kB
  • sloc: cpp: 9,901,738; ansic: 2,201,433; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (114 lines) | stat: -rw-r--r-- 3,064 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// RUN: %empty-directory(%t)

// RUN: %target-build-swift -emit-executable %s -g -o %t/existentials -emit-module
// RUN: sed -ne '/\/\/ *DEMANGLE: /s/\/\/ *DEMANGLE: *//p' < %s > %t/input
// RUN: %lldb-moduleimport-test %t/existentials -type-from-mangled=%t/input | %FileCheck %s --match-full-lines

func blackHole(_: Any...) {}

protocol P {}
protocol Q {}
class C {}

class D : C, P, Q {}

do {
  let e0: Any = D()
  let e1: AnyObject = D()

  let e2: P = D()
  let e4: P & C = D()
  let e3: P & AnyObject = D()

  let e5: P & Q = D()
  let e6: P & Q & C = D()
  let e7: P & Q & AnyObject = D()

  blackHole(e0, e1, e2, e3, e4, e5, e6, e7)
}

do {
  let e0: Any.Type = D.self
  let e1: AnyObject.Type = D.self

  let e2: P.Type = D.self
  let e4: (P & C).Type = D.self
  let e3: (P & AnyObject).Type = D.self

  let e5: (P & Q).Type = D.self
  let e6: (P & Q & C).Type = D.self
  let e7: (P & Q & AnyObject).Type = D.self

  blackHole(e0, e1, e2, e3, e4, e5, e6, e7)
}

do {
  let e0: Any.Protocol = Any.self
  let e1: AnyObject.Protocol = AnyObject.self

  let e2: P.Protocol = P.self
  let e4: (P & C).Protocol = (P & C).self
  let e3: (P & AnyObject).Protocol = (P & AnyObject).self

  let e5: (P & Q).Protocol = (P & Q).self
  let e6: (P & Q & C).Protocol = (P & Q & C).self
  let e7: (P & Q & AnyObject).Protocol = (P & Q & AnyObject).self

  blackHole(e0, e1, e2, e3, e4, e5, e6, e7)
}

// DEMANGLE: $sypD
// DEMANGLE: $syXlD
// DEMANGLE: $s12existentials1P_pD
// DEMANGLE: $s12existentials1P_AA1CCXcD
// DEMANGLE: $s12existentials1P_XlD
// DEMANGLE: $s12existentials1P_AA1QpD
// DEMANGLE: $s12existentials1P_AA1QAA1CCXcD
// DEMANGLE: $s12existentials1P_AA1QXlD

// FIXME(https://github.com/apple/swift/issues/65879): All of these should be existentials, i.e., prefixed with 'any'
// CHECK: Any
// CHECK: AnyObject
// CHECK: P
// CHECK: C & P
// CHECK: P & AnyObject
// CHECK: P & Q
// CHECK: C & P & Q
// CHECK: P & Q & AnyObject

// DEMANGLE: $sypXpD
// DEMANGLE: $syXlXpD
// DEMANGLE: $s12existentials1P_pXpD
// DEMANGLE: $s12existentials1P_XlXpD
// DEMANGLE: $s12existentials1P_AA1CCXcXpD
// DEMANGLE: $s12existentials1P_AA1QpXpD
// DEMANGLE: $s12existentials1P_AA1QAA1CCXcXpD
// DEMANGLE: $s12existentials1P_AA1QXlXpD

// CHECK: any Any.Type
// CHECK: any AnyObject.Type
// CHECK: any P.Type
// CHECK: any (P & AnyObject).Type
// CHECK: any (C & P).Type
// CHECK: any (P & Q).Type
// CHECK: any (C & P & Q).Type
// CHECK: any (P & Q & AnyObject).Type

// DEMANGLE: $sypmD
// DEMANGLE: $syXlmD
// DEMANGLE: $s12existentials1P_pmD
// DEMANGLE: $s12existentials1P_AA1CCXcmD
// DEMANGLE: $s12existentials1P_XlmD
// DEMANGLE: $s12existentials1P_AA1QpmD
// DEMANGLE: $s12existentials1P_AA1QAA1CCXcmD
// DEMANGLE: $s12existentials1P_AA1QXlmD

// FIXME(https://github.com/apple/swift/issues/65880): All of these should be of the form (any <existential>).Type
// CHECK: Any.Type
// CHECK: AnyObject.Type
// CHECK: P.Type
// CHECK: (C & P).Type
// CHECK: (P & AnyObject).Type
// CHECK: (P & Q).Type
// CHECK: (C & P & Q).Type
// CHECK: (P & Q & AnyObject).Type