From 8938895a8338e6084eb12a2bb4bf044928436173 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Wed, 7 Mar 2012 00:15:19 +0000 Subject: [PATCH] Add the DW_AT_APPLE_runtime_class attribute to forward declarations as well as completely defined classes. This fixes rdar://10956070 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152171 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 11 +++++---- test/DebugInfo/objc-fwd-decl.ll | 27 +++++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 test/DebugInfo/objc-fwd-decl.ll diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 51c635e268c..af99f6ba4da 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -870,11 +870,6 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) { if (CTy.isAppleBlockExtension()) addUInt(&Buffer, dwarf::DW_AT_APPLE_block, dwarf::DW_FORM_flag, 1); - unsigned RLang = CTy.getRunTimeLang(); - if (RLang) - addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class, - dwarf::DW_FORM_data1, RLang); - DICompositeType ContainingType = CTy.getContainingType(); if (DIDescriptor(ContainingType).isCompositeType()) addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, @@ -922,6 +917,12 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) { // Add source line info if available. if (!CTy.isForwardDecl()) addSourceLine(&Buffer, CTy); + + // No harm in adding the runtime language to the declaration. + unsigned RLang = CTy.getRunTimeLang(); + if (RLang) + addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class, + dwarf::DW_FORM_data1, RLang); } } diff --git a/test/DebugInfo/objc-fwd-decl.ll b/test/DebugInfo/objc-fwd-decl.ll new file mode 100644 index 00000000000..1a815f936c1 --- /dev/null +++ b/test/DebugInfo/objc-fwd-decl.ll @@ -0,0 +1,27 @@ +; RUN: llc -mtriple=x86_64-macosx %s -o %t -filetype=obj +; RUN: llvm-dwarfdump %t | FileCheck %s + +; CHECK: 0x00000027: DW_TAG_structure_type +; CHECK: 0x0000002c: DW_AT_declaration +; CHECK: 0x0000002d: DW_AT_APPLE_runtime_class + +%0 = type opaque + +@a = common global %0* null, align 8 + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!9, !10, !11, !12} + +!0 = metadata !{i32 786449, i32 0, i32 16, metadata !"foo.m", metadata !"/Users/echristo", metadata !"clang version 3.1 (trunk 152054 trunk 152094)", i1 true, i1 false, metadata !"", i32 2, metadata !1, metadata !1, metadata !1, metadata !3} ; [ DW_TAG_compile_unit ] +!1 = metadata !{metadata !2} +!2 = metadata !{i32 0} +!3 = metadata !{metadata !4} +!4 = metadata !{metadata !5} +!5 = metadata !{i32 786484, i32 0, null, metadata !"a", metadata !"a", metadata !"", metadata !6, i32 3, metadata !7, i32 0, i32 1, %0** @a} ; [ DW_TAG_variable ] +!6 = metadata !{i32 786473, metadata !"foo.m", metadata !"/Users/echristo", null} ; [ DW_TAG_file_type ] +!7 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !8} ; [ DW_TAG_pointer_type ] +!8 = metadata !{i32 786451, null, metadata !"FooBarBaz", metadata !6, i32 1, i32 0, i32 0, i32 0, i32 4, null, null, i32 16} ; [ DW_TAG_structure_type ] +!9 = metadata !{i32 1, metadata !"Objective-C Version", i32 2} +!10 = metadata !{i32 1, metadata !"Objective-C Image Info Version", i32 0} +!11 = metadata !{i32 1, metadata !"Objective-C Image Info Section", metadata !"__DATA, __objc_imageinfo, regular, no_dead_strip"} +!12 = metadata !{i32 4, metadata !"Objective-C Garbage Collection", i32 0}