File: enum.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (123 lines) | stat: -rw-r--r-- 4,534 bytes parent folder | download
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
115
116
117
118
119
120
121
122
123
// RUN: %target-swift-frontend -primary-file %s -emit-ir -g -o - | %FileCheck %s
// RUN: %target-swift-frontend -primary-file %s -emit-ir -gdwarf-types -o - | %FileCheck %s --check-prefix=DWARF

// UNSUPPORTED: OS=watchos

protocol P {}

enum Either {
  case First(Int64), Second(P), Neither
// CHECK: !DICompositeType({{.*}}name: "Either",
// CHECK-SAME:             size: {{328|168}},

// DWARF: !DICompositeType(tag: DW_TAG_structure_type, name: "Either",
// DWARF-SAME:             size: {{328|168}}, num_extra_inhabitants: 253,
// DWARF-SAME:             identifier: "$s4enum6EitherOD")

// DWARF: !DICompositeType(tag: DW_TAG_variant_part

// DWARF: DIDerivedType(tag: DW_TAG_member, name: "First",
// DWARF-NEXT: DICompositeType(tag: DW_TAG_structure_type, name: "Int64",

// DWARF: DIDerivedType(tag: DW_TAG_member, name: "Second"
// DWARF-NEXT: DICompositeType(tag: DW_TAG_structure_type, name: "P",

// DWARF: DIDerivedType(tag: DW_TAG_member, name: "Neither",
// DWARF-SAME:          baseType: null)
}
// CHECK: ![[EMPTY:.*]] = !{}
let E : Either = .Neither;

class C {}
enum EitherWithSpareBits {
  case Left(C), Right(Int32)
// DWARF: !DICompositeType(tag: DW_TAG_structure_type, name: "EitherWithSpareBits", 
// DWARF-SAME:             size: 64,
// DWARF-SAME:             runtimeLang: DW_LANG_Swift, identifier: "$s4enum19EitherWithSpareBitsOD")

// DWARF: !DICompositeType(tag: DW_TAG_variant_part,
// DWARF-SAME:             size: 64, offset: 56, spare_bits_mask: {{240|255}}

// DWARF: !DIDerivedType(tag: DW_TAG_member, name: "Left"

// DWARF: !DIDerivedType(tag: DW_TAG_member, name: "Right"
}
let Right: EitherWithSpareBits = .Right(32)

// CHECK: !DICompositeType({{.*}}name: "Color",
// CHECK-SAME:             size: 8,
// CHECK-SAME:             identifier: "$s4enum5ColorOD"
enum Color : UInt64 {
// This is effectively a 2-bit bitfield:
// DWARF: DICompositeType(tag: DW_TAG_enumeration_type, name: "Color",
// DWARF-NEXT: DICompositeType(tag: DW_TAG_structure_type, name: "UInt64"
// DWARF: !DIEnumerator(name: "Red", value: 0)
// DWARF-NEXT: !DIEnumerator(name: "Green", value: 0)
// DWARF-NEXT: !DIEnumerator(name: "Blue", value: 0)
  case Red, Green, Blue
}

// CHECK: !DICompositeType({{.*}}name: "MaybeIntPair",
// CHECK-SAME:             size: 136{{[,)]}}
// CHECK-SAME:             identifier: "$s4enum12MaybeIntPairOD"

// DWARF: DICompositeType(tag: DW_TAG_structure_type, name: "MaybeIntPair",
// DWARF-SAME:             identifier: "$s4enum12MaybeIntPairOD"
// DWARF: DICompositeType(tag: DW_TAG_variant_part

enum MaybeIntPair {
// DWARF: !DIDerivedType(tag: DW_TAG_member, name: "none"
// DWARF-SAME:           baseType: null)
  case none
// DWARF: !DIDerivedType(tag: DW_TAG_member, name: "just"
// DWARF-SAME:           baseType: ![[INTTUP:[0-9]+]]
// DWARF-SAME:           size: 128{{[,)]}}
// DWARF: ![[INTTUP]] = !DICompositeType({{.*}}identifier: "$ss5Int64V_ABtD"
  case just(Int64, Int64)
}

enum Maybe<T> {
  case none
  case just(T)
}

let r = Color.Red
let c = MaybeIntPair.just(74, 75)
// CHECK: !DICompositeType({{.*}}name: "$s4enum5MaybeOyAA5ColorOGD"
let movie : Maybe<Color> = .none

public enum Nothing { }
public func foo(_ empty : Nothing) { }
// CHECK: !DICompositeType({{.*}}name: "Nothing", {{.*}}elements: ![[EMPTY]]

// CHECK: !DICompositeType({{.*}}name: "$s4enum4RoseOyxG{{z?}}D"
enum Rose<A> {
	case MkRose(() -> A, () -> [Rose<A>])
  // DWARF: !DICompositeType(tag: DW_TAG_structure_type, name: "Rose",  {{.*}}identifier: "$s4enum4RoseOyxGD"
	case IORose(() -> Rose<A>)
}

func foo<T>(_ x : Rose<T>) -> Rose<T> { return x }

// CHECK: !DICompositeType({{.*}}name: "$s4enum5TupleOyxGD"
// DWARF: !DICompositeType({{.*}}name: "Tuple", {{.*}}identifier: "$s4enum5TupleOyxGD"
public enum Tuple<P> {
	case C(P, () -> Tuple)
}

func bar<T>(_ x : Tuple<T>) -> Tuple<T> { return x }

public enum List<T> {
       indirect case Tail(List, T)
       case End
       func fooMyList() {}
// CHECK-DAG: !DILocalVariable(name: "self", arg: 1, {{.*}} line: [[@LINE-1]], type: ![[LET_LIST:[0-9]+]], flags: DIFlagArtificial)
// CHECK-DAG: ![[LET_LIST]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[LIST_CONTAINER:[0-9]+]])
// CHECK-DAG: ![[LIST_CONTAINER]] = !DICompositeType({{.*}}elements: ![[LIST_ELTS:[0-9]+]]
// CHECK-DAG: ![[LIST_ELTS]] = !{![[LIST_MEMBER:[0-9]+]]}
// CHECK-DAG: ![[LIST_MEMBER]] = !DIDerivedType(tag: DW_TAG_member, {{.*}} baseType: ![[LIST:[0-9]+]]
// CHECK-DAG: ![[LIST]] = !DICompositeType({{.*}}name: "$s4enum4ListOyxGD",{{.*}}DIFlagFwdDecl
}