diff options
author | Devang Patel <dpatel@apple.com> | 2010-07-28 01:33:15 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-07-28 01:33:15 +0000 |
commit | a652fab0527c8ceb681c4c336b45dda0db8fc058 (patch) | |
tree | 791939a6476f7a25adcfc9954bed5f96f8cb1819 /clang/lib | |
parent | 7a066723d0d92ae4cae3f2e3d87ac996c792072c (diff) | |
download | bcm5719-llvm-a652fab0527c8ceb681c4c336b45dda0db8fc058.tar.gz bcm5719-llvm-a652fab0527c8ceb681c4c336b45dda0db8fc058.zip |
construct debug info for "id" by hand.
Tested by mi1-var-obj.exp in gdb testsuite.
llvm-svn: 109571
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 8e9f416d4fb..1bdc91016b0 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -251,12 +251,44 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT, default: case BuiltinType::Void: return llvm::DIType(); - case BuiltinType::ObjCId: - // id is struct objc_object *. + case BuiltinType::ObjCClass: return DebugFactory.CreateCompositeType(llvm::dwarf::DW_TAG_structure_type, - Unit, "objc_object", Unit, 0, 0, 0, 0, + Unit, "objc_class", Unit, 0, 0, 0, 0, llvm::DIType::FlagFwdDecl, llvm::DIType(), llvm::DIArray()); + case BuiltinType::ObjCId: { + // typedef struct objc_class *Class; + // typedef struct objc_object { + // Class isa; + // } *id; + + llvm::DIType OCTy = + DebugFactory.CreateCompositeType(llvm::dwarf::DW_TAG_structure_type, + Unit, "objc_class", Unit, 0, 0, 0, 0, + llvm::DIType::FlagFwdDecl, + llvm::DIType(), llvm::DIArray()); + unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy); + + llvm::DIType ISATy = + DebugFactory.CreateDerivedType(llvm::dwarf::DW_TAG_pointer_type, + Unit, "", Unit, + 0, Size, 0, 0, 0, OCTy); + + llvm::SmallVector<llvm::DIDescriptor, 16> EltTys; + + llvm::DIType FieldTy = + DebugFactory.CreateDerivedType(llvm::dwarf::DW_TAG_member, Unit, + "isa", Unit, + 0,Size, 0, 0, 0, ISATy); + EltTys.push_back(FieldTy); + llvm::DIArray Elements = + DebugFactory.GetOrCreateArray(EltTys.data(), EltTys.size()); + + return DebugFactory.CreateCompositeType(llvm::dwarf::DW_TAG_structure_type, + Unit, "objc_object", Unit, 0, 0, 0, 0, + 0, + llvm::DIType(), Elements); + } case BuiltinType::UChar: case BuiltinType::Char_U: Encoding = llvm::dwarf::DW_ATE_unsigned_char; break; case BuiltinType::Char_S: |