blob: 3d3413403e1ca4c8e334e5af6b008bacf82e051f [file] [edit]
; UNSUPPORTED: target={{.*}}-aix{{.*}}
;
; RUN: llc -filetype=obj -o %t.o %s
; RUN: llvm-dwarfdump --debug-info %t.o | FileCheck %s
; RUN: llvm-dwarfdump --verify %t.o | FileCheck %s --check-prefix=VERIFY
; VERIFY: No errors.
; A property that forwards to the data member holding its backing storage.
; This models an Objective-C `@property` synthesized over the backing ivar
; `_x`, so a consumer can read the storage directly.
;
; "Foo" lists the member before the property, "Bar" lists the property before
; the member. Emission must not depend on that order.
; CHECK: DW_TAG_class_type
; CHECK: DW_AT_name ("Foo")
;
; CHECK: 0x[[FOO_X:[0-9a-f]+]]: DW_TAG_member
; CHECK: DW_AT_name ("_x")
;
; CHECK: DW_TAG_property
; CHECK: DW_AT_name ("x")
; CHECK: DW_AT_type {{.*}} "Int"
; CHECK: DW_AT_decl_line (8)
; CHECK: DW_TAG_property_getter
; CHECK: DW_AT_property_forward (0x[[FOO_X]] "_x")
; CHECK: DW_TAG_class_type
; CHECK: DW_AT_name ("Bar")
;
; CHECK: DW_TAG_property
; CHECK: DW_AT_name ("y")
; CHECK: DW_TAG_property_getter
; CHECK: DW_AT_property_forward (0x[[BAR_Y:[0-9a-f]+]] "_y")
;
; CHECK: 0x[[BAR_Y]]: DW_TAG_member
; CHECK: DW_AT_name ("_y")
!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}
!0 = !{i32 7, !"Dwarf Version", i32 5}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !3, producer: "hand written", isOptimized: false, emissionKind: FullDebug, retainedTypes: !4)
!3 = !DIFile(filename: "t.m", directory: "/tmp")
!4 = !{!5, !10}
!5 = !DICompositeType(tag: DW_TAG_class_type, name: "Foo", scope: !3, file: !3, line: 7, size: 64, elements: !6)
!6 = !{!7, !9}
!7 = !DIDerivedType(tag: DW_TAG_member, name: "_x", scope: !5, file: !3, line: 8, baseType: !8, size: 64)
!8 = !DIBasicType(name: "Int", size: 64, encoding: DW_ATE_signed)
!9 = !DIProperty(name: "x", file: !3, line: 8, type: !8, backing_storage: !7)
!10 = !DICompositeType(tag: DW_TAG_class_type, name: "Bar", scope: !3, file: !3, line: 12, size: 64, elements: !11)
!11 = !{!13, !12}
!12 = !DIDerivedType(tag: DW_TAG_member, name: "_y", scope: !10, file: !3, line: 13, baseType: !8, size: 64)
!13 = !DIProperty(name: "y", file: !3, line: 13, type: !8, backing_storage: !12)