From b011c63d198ec5eccb69ea0140cfec81820e1a90 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Mon, 16 Nov 2015 07:57:32 +0000 Subject: [DIBuilder] Make createReferenceType take size and align Summary: Since we're passing references to dbg.value as pointers, we need to have the frontend properly declare their sizes and alignments (as it already does for regular pointers) in preparation for my upcoming patch to have the verifer check that the sizes agree. Also augment the backend logic that skips actually emitting this information into DWARF such that it also handles reference types. Reviewers: aprantl, dexonsmith, dblaikie Subscribers: dblaikie, llvm-commits Differential Revision: http://reviews.llvm.org/D14275 llvm-svn: 253186 --- llvm/test/DebugInfo/Generic/ptrsize.ll | 46 ++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100755 llvm/test/DebugInfo/Generic/ptrsize.ll (limited to 'llvm/test/DebugInfo/Generic') diff --git a/llvm/test/DebugInfo/Generic/ptrsize.ll b/llvm/test/DebugInfo/Generic/ptrsize.ll new file mode 100755 index 00000000000..694aa0bbf3e --- /dev/null +++ b/llvm/test/DebugInfo/Generic/ptrsize.ll @@ -0,0 +1,46 @@ +; REQUIRES: object-emission + +; RUN: %llc_dwarf -O0 -filetype=obj < %s > %t +; RUN: llvm-dwarfdump %t | FileCheck %s + +; Check that pointers and references get emitted without size information in +; DWARF, even if they are so specified in the IR + +; CHECK: 0x[[O1:[0-9a-f]+]]: DW_TAG_pointer_type +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] +; CHECK-NOT: DW_AT_byte_size +; CHECK: 0x[[O2:[0-9a-f]+]]: DW_TAG_ + +; CHECK: 0x[[O3:[0-9a-f]+]]: DW_TAG_reference_type +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] +; CHECK-NOT: DW_AT_byte_size + +define i32 @foo() !dbg !4 { +entry: + ret i32 0, !dbg !13 +} + +define i32 @bar() !dbg !5 { +entry: + ret i32 0, !dbg !13 +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!11, !12} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 0, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2, imports: !2) +!1 = !DIFile(filename: "dwarf-test.c", directory: "test") +!2 = !{} +!3 = !{!4, !5} +!4 = distinct !DISubprogram(name: "foo", scope: !0, file: !1, line: 6, type: !6, isLocal: false, isDefinition: true, scopeLine: 6, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, variables: !2) +!5 = distinct !DISubprogram(name: "bar", scope: !0, file: !1, line: 6, type: !15, isLocal: false, isDefinition: true, scopeLine: 6, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, variables: !2) +!6 = !DISubroutineType(types: !7) +!7 = !{!9} +!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) +!9 = !DIDerivedType(tag: DW_TAG_pointer_type, scope: !0, baseType: !8, size: 64, align: 64) +!10 = !DIDerivedType(tag: DW_TAG_reference_type, scope: !0, baseType: !8, size: 64, align: 64) +!11 = !{i32 2, !"Dwarf Version", i32 3} +!12 = !{i32 1, !"Debug Info Version", i32 3} +!13 = !DILocation(line: 7, scope: !4) +!14 = !{!10} +!15 = !DISubroutineType(types: !14) -- cgit v1.2.3