66// REQUIRES: executable_test
77
88import Foundation
9+ import simd
910
1011import SwiftReflectionTest
1112
@@ -14,11 +15,6 @@ class BaseNSClass : NSObject {
1415 var x : Bool = false
1516}
1617
17- class DerivedNSClass : BaseNSClass {
18- var y : Bool = false
19- var z : Int = 0
20- }
21-
2218let baseClass = BaseNSClass ( )
2319reflect ( object: baseClass)
2420
@@ -42,16 +38,21 @@ reflect(object: baseClass)
4238// CHECK-32: (class inherits_NSObject.BaseNSClass)
4339
4440// CHECK-32: Type info:
45- // CHECK-32-NEXT: (class_instance size=21 alignment=4 stride=24 num_extra_inhabitants=0
46- // CHECK-32-NEXT: (field name=w offset=16
41+ // CHECK-32-NEXT: (class_instance size=17 alignment=4 stride=20 num_extra_inhabitants=0
42+ // CHECK-32-NEXT: (field name=w offset=12
4743// CHECK-32-NEXT: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
4844// CHECK-32-NEXT: (field name=_value offset=0
4945// CHECK-32-NEXT: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
50- // CHECK-32-NEXT: (field name=x offset=20
46+ // CHECK-32-NEXT: (field name=x offset=16
5147// CHECK-32-NEXT: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=254
5248// CHECK-32-NEXT: (field name=_value offset=0
5349// CHECK-32-NEXT: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=254)))))
5450
51+ class DerivedNSClass : BaseNSClass {
52+ var y : Bool = false
53+ var z : Int = 0
54+ }
55+
5556let derivedClass = DerivedNSClass ( )
5657reflect ( object: derivedClass)
5758
@@ -85,4 +86,106 @@ reflect(object: derivedClass)
8586// CHECK-32-NEXT: (field name=_value offset=0
8687// CHECK-32-NEXT: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0)))))
8788
89+ // Note: dynamic layout starts at offset 8, not 16
90+ class GenericBaseNSClass < T> : NSObject {
91+ var w : T = 0 as! T
92+ }
93+
94+ let genericBaseClass = GenericBaseNSClass < Int > ( )
95+ reflect ( object: genericBaseClass)
96+
97+ // CHECK-64: Reflecting an object.
98+ // CHECK-64: Type reference:
99+ // CHECK-64: (bound_generic_class inherits_NSObject.GenericBaseNSClass
100+ // CHECK-64: (struct Swift.Int))
101+
102+ // CHECK-64: Type info:
103+ // CHECK-64-NEXT: (class_instance size=16 alignment=8 stride=16 num_extra_inhabitants=0
104+ // CHECK-64-NEXT: (field name=w offset=8
105+ // CHECK-64-NEXT: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
106+ // CHECK-64-NEXT: (field name=_value offset=0
107+ // CHECK-64-NEXT: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0)))))
108+
109+ // CHECK-32: Reflecting an object.
110+ // CHECK-32: Type reference:
111+ // CHECK-32: (bound_generic_class inherits_NSObject.GenericBaseNSClass
112+ // CHECK-32: (struct Swift.Int))
113+
114+ // CHECK-32: Type info:
115+ // CHECK-32-NEXT: (class_instance size=8 alignment=4 stride=8 num_extra_inhabitants=0
116+ // CHECK-32-NEXT: (field name=w offset=4
117+ // CHECK-32-NEXT: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
118+ // CHECK-32-NEXT: (field name=_value offset=0
119+ // CHECK-32-NEXT: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0)))))
120+
121+ class AlignedNSClass : NSObject {
122+ var w : Int = 0
123+ var x : int4 = [ 1 , 2 , 3 , 4 ]
124+ }
125+
126+ let alignedClass = AlignedNSClass ( )
127+ reflect ( object: alignedClass)
128+
129+ // CHECK-64: Reflecting an object.
130+ // CHECK-64: Type reference:
131+ // CHECK-64: (class inherits_NSObject.AlignedNSClass)
132+
133+ // CHECK-64: Type info:
134+ // CHECK-64-NEXT: (class_instance size=48 alignment=16 stride=48 num_extra_inhabitants=0
135+ // CHECK-64-NEXT: (field name=w offset=16
136+ // CHECK-64-NEXT: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
137+ // CHECK-64-NEXT: (field name=_value offset=0
138+ // CHECK-64-NEXT: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
139+ // CHECK-64-NEXT: (field name=x offset=32
140+ // CHECK-64-NEXT: (builtin size=16 alignment=16 stride=16 num_extra_inhabitants=0)))
141+
142+ // CHECK-32: Reflecting an object.
143+ // CHECK-32: Type reference:
144+ // CHECK-32: (class inherits_NSObject.AlignedNSClass)
145+
146+ // CHECK-32: Type info:
147+ // CHECK-32-NEXT: (class_instance size=32 alignment=16 stride=32 num_extra_inhabitants=0
148+ // CHECK-32-NEXT: (field name=w offset=12
149+ // CHECK-32-NEXT: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
150+ // CHECK-32-NEXT: (field name=_value offset=0
151+ // CHECK-32-NEXT: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
152+ // CHECK-32-NEXT: (field name=x offset=16
153+ // CHECK-32-NEXT: (builtin size=16 alignment=16 stride=16 num_extra_inhabitants=0)))
154+
155+ class GenericAlignedNSClass < T> : NSObject {
156+ var w : T = 0 as! T
157+ var x : int4 = [ 1 , 2 , 3 , 4 ]
158+ }
159+
160+ let genericAlignedClass = GenericAlignedNSClass < Int > ( )
161+ reflect ( object: genericAlignedClass)
162+
163+ // CHECK-64: Reflecting an object.
164+ // CHECK-64: Type reference:
165+ // CHECK-64: (bound_generic_class inherits_NSObject.GenericAlignedNSClass
166+ // CHECK-64: (struct Swift.Int))
167+
168+ // CHECK-64: Type info:
169+ // CHECK-64-NEXT: (class_instance size=48 alignment=16 stride=48 num_extra_inhabitants=0
170+ // CHECK-64-NEXT: (field name=w offset=16
171+ // CHECK-64-NEXT: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
172+ // CHECK-64-NEXT: (field name=_value offset=0
173+ // CHECK-64-NEXT: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
174+ // CHECK-64-NEXT: (field name=x offset=32
175+ // CHECK-64-NEXT: (builtin size=16 alignment=16 stride=16 num_extra_inhabitants=0)))
176+
177+ // CHECK-32: Reflecting an object.
178+ // CHECK-32: Type reference:
179+ // CHECK-32: (bound_generic_class inherits_NSObject.GenericAlignedNSClass
180+ // CHECK-32: (struct Swift.Int))
181+
182+ // CHECK-32: Type info:
183+ // CHECK-32-NEXT: (class_instance size=48 alignment=16 stride=48 num_extra_inhabitants=0
184+ // CHECK-32-NEXT: (field name=w offset=16
185+ // CHECK-32-NEXT: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
186+ // CHECK-32-NEXT: (field name=_value offset=0
187+ // CHECK-32-NEXT: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
188+ // CHECK-32-NEXT: (field name=x offset=32
189+ // CHECK-32-NEXT: (builtin size=16 alignment=16 stride=16 num_extra_inhabitants=0)))
190+
88191doneReflecting ( )
0 commit comments