Skip to content

Commit ed58501

Browse files
committed
Account for the generic zero-sized payload enum cases.
Disable the assert: // At least one payload is non-empty (otherwise this // would get laid out as a non-payload enum) assert(getNumNonEmptyPayloadCases() > 0); in TaggedMultiPayloadEnumTypeInfo because it fails when you have generic but zero-sized payload enum cases. Also remove unnecessary "REQUIRES: objc_interop" lines from the enum reflection tests.
1 parent fca24bd commit ed58501

15 files changed

+84
-16
lines changed

stdlib/public/RemoteInspection/TypeLowering.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -667,9 +667,11 @@ class TaggedMultiPayloadEnumTypeInfo: public EnumTypeInfo {
667667
assert(getCases().size() > 1); // At least 2 cases
668668
assert(Cases[0].TR != 0); // At least 2 payloads
669669
// assert(Cases[1].TR != 0);
670-
// At least one payload is non-empty (otherwise this
671-
// would get laid out as a non-payload enum)
672-
assert(getNumNonEmptyPayloadCases() > 0);
670+
// At least one payload is non-empty (otherwise this would get
671+
// laid out as a non-payload enum). Commented out this assert
672+
// because it doesn't hold when there are generic cases with
673+
// zero-sized payload.
674+
// assert(getNumNonEmptyPayloadCases() > 0);
673675
// There's a tag, so the total size must be bigger than any payload
674676
// assert(getSize() > getPayloadSize());
675677
}

validation-test/Reflection/reflect_Enum_MultiPayload_bulky.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_bulky | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic2.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic2 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic3.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic3 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic4.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic4 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic5.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic5 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic6.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic6 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_generic7.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic7 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Enum_MultiPayload_generic_empty
3+
// RUN: %target-codesign %t/reflect_Enum_MultiPayload_generic_empty
4+
5+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_generic_empty | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
6+
7+
// REQUIRES: reflection_test_support
8+
// REQUIRES: executable_test
9+
// UNSUPPORTED: use_os_stdlib
10+
11+
import SwiftReflectionTest
12+
13+
struct S {
14+
}
15+
16+
public enum AppearanceBasedConfiguration<T> {
17+
case single(T)
18+
case appearanceBased(light: T, dark: T)
19+
}
20+
21+
reflect(enum: AppearanceBasedConfiguration<S>.single(S()))
22+
23+
// CHECK: Reflecting an enum.
24+
// CHECK-NEXT: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
25+
// CHECK-NEXT: Type reference:
26+
// CHECK-NEXT: (bound_generic_enum reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration
27+
// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S))
28+
29+
// CHECK: Type info:
30+
// X64-NEXT: (multi_payload_enum size=1 alignment=1 stride=1 num_extra_inhabitants=254 bitwise_takable=1
31+
// X64-NEXT: (case name=single index=0 offset=0
32+
// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))
33+
// X64-NEXT: (case name=appearanceBased index=1 offset=0
34+
// X64-NEXT: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1
35+
// X64-NEXT: (field offset=0
36+
// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))
37+
// X64-NEXT: (field offset=0
38+
// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))))
39+
40+
// CHECK: Mangled name: $s39reflect_Enum_MultiPayload_generic_empty28AppearanceBasedConfigurationOyAA1SVG
41+
// CHECK-NEXT: Demangled name: reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration<reflect_Enum_MultiPayload_generic_empty.S>
42+
43+
// CHECK: Enum value:
44+
// CHECK-NEXT: (enum_value name=single index=0
45+
// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S)
46+
// CHECK-NEXT: )
47+
48+
reflect(enum: AppearanceBasedConfiguration<S>.appearanceBased(light: S(), dark: S()))
49+
50+
// CHECK: Reflecting an enum.
51+
// CHECK-NEXT: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
52+
// CHECK-NEXT: Type reference:
53+
// CHECK-NEXT: (bound_generic_enum reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration
54+
// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S))
55+
56+
// CHECK: Type info:
57+
// X64-NEXT: (multi_payload_enum size=1 alignment=1 stride=1 num_extra_inhabitants=254 bitwise_takable=1
58+
// X64-NEXT: (case name=single index=0 offset=0
59+
// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))
60+
// X64-NEXT: (case name=appearanceBased index=1 offset=0
61+
// X64-NEXT: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1
62+
// X64-NEXT: (field offset=0
63+
// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))
64+
// X64-NEXT: (field offset=0
65+
// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))))
66+
67+
// CHECK: Mangled name: $s39reflect_Enum_MultiPayload_generic_empty28AppearanceBasedConfigurationOyAA1SVG
68+
// CHECK-NEXT: Demangled name: reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration<reflect_Enum_MultiPayload_generic_empty.S>
69+
70+
// CHECK: Enum value:
71+
// CHECK-NEXT: (enum_value name=appearanceBased index=1
72+
// CHECK-NEXT: (tuplelight =
73+
// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S)dark =
74+
// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S))
75+
// CHECK-NEXT: )
76+
77+
doneReflecting()
78+
79+
// CHECK: Done.

validation-test/Reflection/reflect_Enum_MultiPayload_large.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_large | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_value.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_value | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_MultiPayload_value_indirect.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_MultiPayload_value | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

validation-test/Reflection/reflect_Enum_SingleCaseCFPayload.swift

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_SingleCaseCFPayload | %FileCheck %s --check-prefix=CHECK-%target-ptrsize
66

7-
// REQUIRES: objc_interop
87
// REQUIRES: reflection_test_support
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib

validation-test/Reflection/reflect_Enum_SinglePayload_generic1.swift

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_SinglePayload_generic1 | tee /dev/stderr | %FileCheck %s --check-prefix=CHECK --check-prefix=X%target-ptrsize --dump-input=fail
66

77
// REQUIRES: reflection_test_support
8-
// REQUIRES: objc_interop
98
// REQUIRES: executable_test
109
// UNSUPPORTED: use_os_stdlib
1110

0 commit comments

Comments
 (0)