Skip to content

Commit c81141a

Browse files
committed
[Reflection] Add a test for reflecting empty structs.
rdar://problem/56784375
1 parent 1b8a723 commit c81141a

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
struct EmptyStructC {
2+
int trailing[0];
3+
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module EmptyStruct {
2+
header "EmptyStruct.h"
3+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest -I %S/Inputs/EmptyStruct/ %s -o %t/reflect_empty_struct
3+
// RUN: %target-codesign %t/reflect_empty_struct
4+
5+
// RUN: %target-run %target-swift-reflection-test %t/reflect_empty_struct | %FileCheck %s --check-prefix=CHECK-%target-ptrsize
6+
7+
// REQUIRES: objc_interop
8+
// REQUIRES: executable_test
9+
10+
import SwiftReflectionTest
11+
12+
import EmptyStruct
13+
14+
@_alignment(1) struct EmptyStruct { }
15+
class Class {
16+
var a = EmptyStruct()
17+
var b: Any = EmptyStruct()
18+
var c = EmptyStructC()
19+
var d: Any = EmptyStructC()
20+
}
21+
22+
var obj = Class()
23+
24+
reflect(object: obj)
25+
26+
// CHECK-64: Reflecting an object.
27+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
28+
// CHECK-64: Type reference:
29+
// CHECK-64: (class reflect_empty_struct.Class)
30+
31+
// CHECK-64: Type info:
32+
// CHECK-64: (class_instance size=80 alignment=8 stride=80 num_extra_inhabitants=0 bitwise_takable=1
33+
// CHECK-64: (field name=a offset=16
34+
// CHECK-64: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))
35+
// CHECK-64: (field name=b offset=16
36+
// CHECK-64: (opaque_existential size=32 alignment=8 stride=32 num_extra_inhabitants=2147483647 bitwise_takable=1
37+
// CHECK-64: (field name=metadata offset=24
38+
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647 bitwise_takable=1))))
39+
// CHECK-64: (field name=c offset=48
40+
// CHECK-64: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1
41+
// CHECK-64: (field name=trailing offset=0
42+
// CHECK-64: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))))
43+
// CHECK-64: (field name=d offset=48
44+
// CHECK-64: (opaque_existential size=32 alignment=8 stride=32 num_extra_inhabitants=2147483647 bitwise_takable=1
45+
// CHECK-64: (field name=metadata offset=24
46+
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647 bitwise_takable=1)))))
47+
48+
// CHECK-32: Reflecting an object.
49+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
50+
// CHECK-32: Type reference:
51+
// CHECK-32: (class reflect_empty_struct.Class)
52+
53+
// CHECK-32: Type info:
54+
// CHECK-32: (class_instance size=40 alignment=4 stride=40 num_extra_inhabitants=0 bitwise_takable=1
55+
// CHECK-32: (field name=a offset=8
56+
// CHECK-32: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))
57+
// CHECK-32: (field name=b offset=8
58+
// CHECK-32: (opaque_existential size=16 alignment=4 stride=16 num_extra_inhabitants=4096 bitwise_takable=1
59+
// CHECK-32: (field name=metadata offset=12
60+
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))
61+
// CHECK-32: (field name=c offset=24
62+
// CHECK-32: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1
63+
// CHECK-32: (field name=trailing offset=0
64+
// CHECK-32: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))))
65+
// CHECK-32: (field name=d offset=24
66+
// CHECK-32: (opaque_existential size=16 alignment=4 stride=16 num_extra_inhabitants=4096 bitwise_takable=1
67+
// CHECK-32: (field name=metadata offset=12
68+
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1)))))
69+
70+
doneReflecting()
71+
72+
// CHECK-64: Done.
73+
74+
// CHECK-32: Done.

0 commit comments

Comments
 (0)