Skip to content

Commit 0abc2b7

Browse files
authored
Merge pull request #68566 from kubamracek/embedded-globals
[embedded] Add a testcase demonstrating IRGen of zeroinit globals and statics
2 parents b0f91ac + fc54858 commit 0abc2b7

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

test/embedded/globals.swift

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// RUN: %target-swift-emit-ir -target armv7-apple-none-macho -parse-stdlib -module-name Swift %s -enable-experimental-feature Embedded -wmo -parse-as-library | %FileCheck %s
2+
// RUN: %target-swift-emit-ir -target armv7-apple-none-macho -parse-stdlib -module-name Swift %s -enable-experimental-feature Embedded -wmo -parse-as-library -O | %FileCheck %s
3+
4+
// REQUIRES: swift_in_compiler
5+
6+
precedencegroup AssignmentPrecedence { assignment: true }
7+
public typealias IntegerLiteralType = Int
8+
public typealias _MaxBuiltinIntegerType = Builtin.IntLiteral
9+
public typealias _MaxBuiltinFloatType = Builtin.FPIEEE80
10+
public protocol _ExpressibleByBuiltinIntegerLiteral {
11+
init(_builtinIntegerLiteral value: _MaxBuiltinIntegerType)
12+
}
13+
public protocol _ExpressibleByBuiltinFloatLiteral {
14+
init(_builtinFloatLiteral value: _MaxBuiltinFloatType)
15+
}
16+
public protocol ExpressibleByIntegerLiteral {
17+
associatedtype IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral
18+
init(integerLiteral value: IntegerLiteralType)
19+
}
20+
public protocol ExpressibleByFloatLiteral {
21+
associatedtype FloatLiteralType : _ExpressibleByBuiltinFloatLiteral
22+
init(floatLiteral value: FloatLiteralType)
23+
}
24+
public struct Int : _ExpressibleByBuiltinIntegerLiteral, ExpressibleByIntegerLiteral {
25+
var value: Builtin.Word
26+
public init() {
27+
self = 0
28+
}
29+
public init(_builtinIntegerLiteral value: _MaxBuiltinIntegerType) {
30+
let builtinValue = Builtin.s_to_s_checked_trunc_IntLiteral_Word(value).0
31+
self.value = builtinValue
32+
}
33+
public init(integerLiteral value: IntegerLiteralType) {
34+
self = value
35+
}
36+
}
37+
38+
private let global_int_1: Int = 0
39+
public let global_int_2: Int = 0
40+
private var global_int_3: Int = 0
41+
public var global_int_4: Int = 0
42+
43+
private enum MyPrivateEnum { }
44+
45+
public enum MyPublicEnum { }
46+
47+
extension MyPrivateEnum {
48+
private static let static_int_1: Int = 0
49+
public static let static_int_2: Int = 0
50+
private static var static_int_3: Int = 0
51+
public static var static_int_4: Int = 0
52+
}
53+
54+
extension MyPublicEnum {
55+
private static let static_int_1: Int = 0
56+
public static let static_int_2: Int = 0
57+
private static var static_int_3: Int = 0
58+
public static var static_int_4: Int = 0
59+
}
60+
61+
private struct MyPrivateStruct {
62+
var x, y: Int
63+
}
64+
65+
private let global_myprivatestruct_1: MyPrivateStruct = MyPrivateStruct(x: 0, y: 0)
66+
private var global_myprivatestruct_3: MyPrivateStruct = MyPrivateStruct(x: 0, y: 0)
67+
68+
extension MyPrivateEnum {
69+
private static let static_myprivatestruct_1: MyPrivateStruct = MyPrivateStruct(x: 0, y: 0)
70+
private static var static_myprivatestruct_3: MyPrivateStruct = MyPrivateStruct(x: 0, y: 0)
71+
}
72+
73+
extension MyPublicEnum {
74+
private static let static_myprivatestruct_1: MyPrivateStruct = MyPrivateStruct(x: 0, y: 0)
75+
private static var static_myprivatestruct_3: MyPrivateStruct = MyPrivateStruct(x: 0, y: 0)
76+
}
77+
78+
public struct MyPublicStruct {
79+
var x, y: Int
80+
}
81+
82+
private let global_my_publicstruct_1: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
83+
public let global_my_publicstruct_2: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
84+
private var global_my_publicstruct_3: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
85+
public var global_my_publicstruct_4: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
86+
87+
extension MyPrivateEnum {
88+
private static let static_mypublicstruct_1: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
89+
public static let static_mypublicstruct_2: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
90+
private static var static_mypublicstruct_3: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
91+
public static var static_mypublicstruct_4: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
92+
}
93+
94+
extension MyPublicEnum {
95+
private static let static_mypublicstruct_1: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
96+
public static let static_mypublicstruct_2: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
97+
private static var static_mypublicstruct_3: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
98+
public static var static_mypublicstruct_4: MyPublicStruct = MyPublicStruct(x: 0, y: 0)
99+
}
100+
101+
// CHECK-NOT: global_int_1
102+
// CHECK: @"$ss12global_int_2Sivp" = {{.*}}zeroinitializer
103+
// CHECK-NOT: global_int_3
104+
// CHECK: @"$ss12global_int_4Sivp" = {{.*}}zeroinitializer
105+
// CHECK-NOT: static_int_1
106+
// CHECK: @"$ss12MyPublicEnumO12static_int_2SivpZ" = {{.*}}zeroinitializer
107+
// CHECK-NOT: static_int_3
108+
// CHECK: @"$ss12MyPublicEnumO12static_int_4SivpZ" = {{.*}}zeroinitializer
109+
// CHECK-NOT: global_my_publicstruct_1
110+
// CHECK: @"$ss24global_my_publicstruct_2s14MyPublicStructVvp" = {{.*}}zeroinitializer
111+
// CHECK-NOT: global_my_publicstruct_3
112+
// CHECK: @"$ss24global_my_publicstruct_4s14MyPublicStructVvp" = {{.*}}zeroinitializer
113+
// CHECK-NOT: stati_my_publicstruct_1
114+
// CHECK: @"$ss12MyPublicEnumO23static_mypublicstruct_2s0aB6StructVvpZ" = {{.*}}zeroinitializer
115+
// CHECK-NOT: stati_my_publicstruct_3
116+
// CHECK: @"$ss12MyPublicEnumO23static_mypublicstruct_4s0aB6StructVvpZ" = {{.*}}zeroinitializer

0 commit comments

Comments
 (0)