More long term solution

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30720 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey 2006-10-04 10:40:15 +00:00
parent 83e6c9925e
commit 0c0feb9d5f

View File

@ -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<SubprogramDesc>(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<BasicTypeDesc>(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<SubprogramDesc>(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.)