From 4f6cdc07e9aadb5eaeedaae171d830ee07d097aa Mon Sep 17 00:00:00 2001 From: Stuart Hastings Date: Tue, 6 Apr 2010 21:38:29 +0000 Subject: [PATCH] Reverting 100530 & 100531 due to regressions in the GDB test suite. llvm-svn: 100563 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 30 +++++-------------- lib/CodeGen/AsmPrinter/DwarfDebug.h | 3 -- .../2010-02-17-DbgArtificialArg.cpp | 4 +-- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 0af6b3315ae..b472d1e5335 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -800,26 +800,12 @@ void DwarfDebug::addToContextOwner(DIE *Die, DIDescriptor Context) { } else if (Context.isNameSpace()) { DIE *ContextDIE = getOrCreateNameSpace(DINameSpace(Context.getNode())); ContextDIE->addChild(Die); - } else if (Context.isSubprogram()) { - DIE *ContextDIE = createSubprogramDIE(DISubprogram(Context.getNode()), - /*MakeDecl=*/false); - ContextDIE->addChild(Die); } else if (DIE *ContextDIE = ModuleCU->getDIE(Context.getNode())) ContextDIE->addChild(Die); else ModuleCU->addDie(Die); } -/// isFunctionContext - True if given Context is nested within a function. -bool DwarfDebug::isFunctionContext(DIE *context) { - if (context == (DIE *)0) - return false; - if (context->getTag() == dwarf::DW_TAG_subprogram) - return true; - else - return isFunctionContext(context->getParent()); -} - /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the /// given DIType. DIE *DwarfDebug::getOrCreateTypeDIE(DIType Ty) { @@ -1001,10 +987,6 @@ void DwarfDebug::constructTypeDIE(DIE &Buffer, DICompositeType CTy) { if (DIDescriptor(ContainingType.getNode()).isCompositeType()) addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, getOrCreateTypeDIE(DIType(ContainingType.getNode()))); - else { - DIDescriptor Context = CTy.getContext(); - addToContextOwner(&Buffer, Context); - } break; } default: @@ -1820,15 +1802,19 @@ void DwarfDebug::constructGlobalVariableDIE(MDNode *N) { void DwarfDebug::constructSubprogramDIE(MDNode *N) { DISubprogram SP(N); + // Check for pre-existence. + if (ModuleCU->getDIE(N)) + return; + if (!SP.isDefinition()) // This is a method declaration which will be handled while constructing // class type. return; - // Check for pre-existence. - DIE *SubprogramDie = ModuleCU->getDIE(N); - if (!SubprogramDie) - SubprogramDie = createSubprogramDIE(SP); + DIE *SubprogramDie = createSubprogramDIE(SP); + + // Add to map. + ModuleCU->insertDIE(N, SubprogramDie); // Add to context owner. addToContextOwner(SubprogramDie, SP.getContext()); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 6d6d02b4dfa..c7baf5f5d38 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -332,9 +332,6 @@ private: /// addToContextOwner - Add Die into the list of its context owner's children. void addToContextOwner(DIE *Die, DIDescriptor Context); - /// isFunctionContext - True if given Context is nested within a function. - bool isFunctionContext(DIE *context); - /// addType - Add a new type attribute to the specified entity. void addType(DIE *Entity, DIType Ty); diff --git a/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp b/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp index ff45412b441..2a9f1f156b1 100644 --- a/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp +++ b/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp @@ -1,4 +1,4 @@ -// RUN: %llvmgcc -g -S %s -o - | FileCheck %s +// RUN: %llvmgcc -g -S %s -o - | grep DW_TAG_pointer_type | grep "i32 524303, metadata .., metadata ..., metadata .., i32 ., i64 .., i64 .., i64 0, i32 64, metadata ..." // Here, second to last argument "i32 64" indicates that artificial type is set. // Test to artificial attribute attahed to "this" pointer type. // Radar 7655792 and 7655002 @@ -10,7 +10,5 @@ public: int foo() { A a; - // Matching "i32 64, metadata !} ; [ DW_TAG_pointer_type ]" - // CHECK: i32 64, metadata {{![0-9]+\} ; \[ DW_TAG_pointer_type \]}} return a.fn1(1); }