From 0451736fc9e36e6e525460871020724204f4da5a Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 31 Jan 2014 19:52:26 +0000 Subject: [PATCH] DebugInfo: Flag type unit references as declarations This ensures DWARF consumers don't confuse these references for definitions. I'd argue it might be nice to improve debuggers so we don't need this, but it's just one field in an abbreviation anyway - so it doesn't seem worth the fight. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200569 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 5 +++++ test/DebugInfo/X86/generate-odr-hash.ll | 2 ++ 2 files changed, 7 insertions(+) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index e4188c39b07..24beebbd35a 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -3016,6 +3016,11 @@ void DwarfDebug::emitDebugStrDWO() { void DwarfDebug::addDwarfTypeUnitType(DICompileUnit CUNode, StringRef Identifier, DIE *RefDie, DICompositeType CTy) { + // Flag the type unit reference as a declaration so that if it contains + // members (implicit special members, static data member definitions, member + // declarations for definitions in this CU, etc) consumers don't get confused + // and think this is a full definition. + CUMap.begin()->second->addFlag(RefDie, dwarf::DW_AT_declaration); const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy]; if (TU) { diff --git a/test/DebugInfo/X86/generate-odr-hash.ll b/test/DebugInfo/X86/generate-odr-hash.ll index 2ccbc98d5e0..74c1699ef8b 100644 --- a/test/DebugInfo/X86/generate-odr-hash.ll +++ b/test/DebugInfo/X86/generate-odr-hash.ll @@ -51,8 +51,10 @@ ; CHECK: Compile Unit: length = [[CU_SIZE:[0-9a-f]+]] ; CHECK: DW_TAG_structure_type +; CHECK-NEXT: DW_AT_declaration ; CHECK-NEXT: DW_AT_signature ; CHECK: DW_TAG_class_type +; CHECK-NEXT: DW_AT_declaration ; CHECK-NEXT: DW_AT_signature ; Ensure the CU-local type 'walrus' is not placed in a type unit.