From: Jim Laskey Date: Wed, 4 Oct 2006 10:40:15 +0000 (+0000) Subject: More long term solution X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0c0feb9d5f208cde7c0f61899333da913018f17f;p=oota-llvm.git More long term solution git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30720 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 32079f22006..aa393f36784 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -1259,17 +1259,27 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) { Unit->getDie()->AddChild(Die); return Die; } - + // Check for pre-existence. DIE *&Slot = Unit->getDieMapSlotFor(TyDesc); if (Slot) return Slot; + // Type DIE result. + DIE *Ty = NULL; + + // Short cut for handling subprogram types (not really a TyDesc.) + if (SubprogramDesc *SubprogramTy = dyn_cast(TyDesc)) { + Slot = Ty = new DIE(DW_TAG_pointer_type); + Ty->AddUInt(DW_AT_byte_size, 0, TAI->getAddressSize()); + Ty->AddString(DW_AT_name, DW_FORM_string, SubprogramTy->getName()); + Context->AddChild(Ty); + return Slot; + } + // Get core information. const std::string &Name = TyDesc->getName(); uint64_t Size = TyDesc->getSize() >> 3; - DIE *Ty = NULL; - if (BasicTypeDesc *BasicTy = dyn_cast(TyDesc)) { // Fundamental types like int, float, bool Slot = Ty = new DIE(DW_TAG_base_type); @@ -1526,14 +1536,8 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) { } default: break; } - } else if (SubprogramDesc *SubprogramTy = dyn_cast(TyDesc)) { - Slot = Ty = new DIE(DW_TAG_pointer_type); - Ty->AddUInt(DW_AT_byte_size, 0, TAI->getAddressSize()); - Ty->AddString(DW_AT_name, DW_FORM_string, SubprogramTy->getName()); - Context->AddChild(Ty); - return Slot; } - + assert(Ty && "Type not supported yet"); // Add size if non-zero (derived types don't have a size.)