diff --git a/stdlib/public/RemoteInspection/TypeLowering.cpp b/stdlib/public/RemoteInspection/TypeLowering.cpp index 6851210e0852e..7ebc76b7481ea 100644 --- a/stdlib/public/RemoteInspection/TypeLowering.cpp +++ b/stdlib/public/RemoteInspection/TypeLowering.cpp @@ -667,9 +667,11 @@ class TaggedMultiPayloadEnumTypeInfo: public EnumTypeInfo { assert(getCases().size() > 1); // At least 2 cases assert(Cases[0].TR != 0); // At least 2 payloads // assert(Cases[1].TR != 0); - // At least one payload is non-empty (otherwise this - // would get laid out as a non-payload enum) - assert(getNumNonEmptyPayloadCases() > 0); + // At least one payload is non-empty (otherwise this would get + // laid out as a non-payload enum). Commented out this assert + // because it doesn't hold when there are generic cases with + // zero-sized payload. + // assert(getNumNonEmptyPayloadCases() > 0); // There's a tag, so the total size must be bigger than any payload // assert(getSize() > getPayloadSize()); } diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_bulky.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_bulky.swift index 5e81f63cb82f5..848707f31a463 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_bulky.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_bulky.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic.swift index 29a1a22ea9886..2effb0b2cebb6 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic2.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic2.swift index dd45c41ebfb3f..dddb4504335f6 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic2.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic2.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic3.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic3.swift index 77b6238fc71d7..6840651beafb0 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic3.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic3.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic4.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic4.swift index d4f089dc98965..926f470394ae8 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic4.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic4.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic5.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic5.swift index 748d638bfd1af..f3bfb69abccb4 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic5.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic5.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic6.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic6.swift index 766389b1fa84b..33663a88a32cc 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic6.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic6.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic7.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic7.swift index d80fde9448794..b84bf91d9eae5 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_generic7.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic7.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_generic_empty.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_generic_empty.swift new file mode 100644 index 0000000000000..00a3a1b3b832c --- /dev/null +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_generic_empty.swift @@ -0,0 +1,79 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Enum_MultiPayload_generic_empty +// RUN: %target-codesign %t/reflect_Enum_MultiPayload_generic_empty + +// 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 + +// REQUIRES: reflection_test_support +// REQUIRES: executable_test +// UNSUPPORTED: use_os_stdlib + +import SwiftReflectionTest + +struct S { +} + +public enum AppearanceBasedConfiguration { + case single(T) + case appearanceBased(light: T, dark: T) +} + +reflect(enum: AppearanceBasedConfiguration.single(S())) + +// CHECK: Reflecting an enum. +// CHECK-NEXT: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}} +// CHECK-NEXT: Type reference: +// CHECK-NEXT: (bound_generic_enum reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration +// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S)) + +// CHECK: Type info: +// X64-NEXT: (multi_payload_enum size=1 alignment=1 stride=1 num_extra_inhabitants=254 bitwise_takable=1 +// X64-NEXT: (case name=single index=0 offset=0 +// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)) +// X64-NEXT: (case name=appearanceBased index=1 offset=0 +// X64-NEXT: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1 +// X64-NEXT: (field offset=0 +// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)) +// X64-NEXT: (field offset=0 +// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))))) + +// CHECK: Mangled name: $s39reflect_Enum_MultiPayload_generic_empty28AppearanceBasedConfigurationOyAA1SVG +// CHECK-NEXT: Demangled name: reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration + +// CHECK: Enum value: +// CHECK-NEXT: (enum_value name=single index=0 +// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S) +// CHECK-NEXT: ) + +reflect(enum: AppearanceBasedConfiguration.appearanceBased(light: S(), dark: S())) + +// CHECK: Reflecting an enum. +// CHECK-NEXT: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}} +// CHECK-NEXT: Type reference: +// CHECK-NEXT: (bound_generic_enum reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration +// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S)) + +// CHECK: Type info: +// X64-NEXT: (multi_payload_enum size=1 alignment=1 stride=1 num_extra_inhabitants=254 bitwise_takable=1 +// X64-NEXT: (case name=single index=0 offset=0 +// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)) +// X64-NEXT: (case name=appearanceBased index=1 offset=0 +// X64-NEXT: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1 +// X64-NEXT: (field offset=0 +// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)) +// X64-NEXT: (field offset=0 +// X64-NEXT: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1))))) + +// CHECK: Mangled name: $s39reflect_Enum_MultiPayload_generic_empty28AppearanceBasedConfigurationOyAA1SVG +// CHECK-NEXT: Demangled name: reflect_Enum_MultiPayload_generic_empty.AppearanceBasedConfiguration + +// CHECK: Enum value: +// CHECK-NEXT: (enum_value name=appearanceBased index=1 +// CHECK-NEXT: (tuplelight = +// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S)dark = +// CHECK-NEXT: (struct reflect_Enum_MultiPayload_generic_empty.S)) +// CHECK-NEXT: ) + +doneReflecting() + +// CHECK: Done. diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_large.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_large.swift index 576ebd08ed229..29a068b58cce5 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_large.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_large.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_value.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_value.swift index 0416eefeda97b..2dae9f9e32d99 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_value.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_value.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_MultiPayload_value_indirect.swift b/validation-test/Reflection/reflect_Enum_MultiPayload_value_indirect.swift index 40c116c9e358a..158769e2aa2e1 100644 --- a/validation-test/Reflection/reflect_Enum_MultiPayload_value_indirect.swift +++ b/validation-test/Reflection/reflect_Enum_MultiPayload_value_indirect.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_SingleCaseCFPayload.swift b/validation-test/Reflection/reflect_Enum_SingleCaseCFPayload.swift index 719a015f9e610..4936d23e6d3a8 100644 --- a/validation-test/Reflection/reflect_Enum_SingleCaseCFPayload.swift +++ b/validation-test/Reflection/reflect_Enum_SingleCaseCFPayload.swift @@ -4,7 +4,6 @@ // RUN: %target-run %target-swift-reflection-test %t/reflect_Enum_SingleCaseCFPayload | %FileCheck %s --check-prefix=CHECK-%target-ptrsize -// REQUIRES: objc_interop // REQUIRES: reflection_test_support // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib diff --git a/validation-test/Reflection/reflect_Enum_SinglePayload_generic1.swift b/validation-test/Reflection/reflect_Enum_SinglePayload_generic1.swift index e163782288745..e897bb11f6cda 100644 --- a/validation-test/Reflection/reflect_Enum_SinglePayload_generic1.swift +++ b/validation-test/Reflection/reflect_Enum_SinglePayload_generic1.swift @@ -5,7 +5,6 @@ // 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 // REQUIRES: reflection_test_support -// REQUIRES: objc_interop // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib