Files
swift-mirror/test/DebugInfo/indirect_enum_case.swift
T
Augusto Noronha 9a42678cd0 [DebugInfo] Emit DW_TAG_reference_type for indirect enum cases in DWARF
Wrap indirect enum case payload types in DW_TAG_reference_type to indicate
that the case stores a pointer to a heap-allocated box rather than the
payload directly.

rdar://170687015
2026-02-23 15:53:16 -08:00

30 lines
1.3 KiB
Swift

// RUN: %target-swift-frontend -primary-file %s -emit-ir -gdwarf-types -o - | %FileCheck %s
// Test that explicit `indirect case` declarations are represented with
// DW_TAG_reference_type in debug info, while non-indirect cases
// are represented directly.
// CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "MixedEnum", {{.*}}elements: ![[OUTER:[0-9]+]]
// CHECK-DAG: ![[OUTER]] = !{![[VP:[0-9]+]]}
// CHECK-DAG: ![[VP]] = !DICompositeType(tag: DW_TAG_variant_part, {{.*}}elements: ![[ELTS:[0-9]+]])
// CHECK-DAG: ![[ELTS]] = !{![[EMPTY:[0-9]+]], ![[VALUE:[0-9]+]], ![[INDIRECT:[0-9]+]]}
// The empty case has no type
// CHECK-DAG: ![[EMPTY]] = !DIDerivedType(tag: DW_TAG_member, name: "empty",
// The value case should NOT have a reference type (it's not indirect)
// CHECK-DAG: ![[VALUE]] = !DIDerivedType(tag: DW_TAG_member, name: "value", {{.*}}baseType: ![[INT:[0-9]+]]
// CHECK-DAG: ![[INT]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Int",
// The indirect case should have a reference type
// CHECK-DAG: ![[INDIRECT]] = !DIDerivedType(tag: DW_TAG_member, name: "indirectValue", {{.*}}baseType: ![[IND_REF:[0-9]+]]
// CHECK-DAG: ![[IND_REF]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: ![[INT]]
enum MixedEnum {
case empty
case value(Int)
indirect case indirectValue(Int)
}
let mixed = MixedEnum.value(42)