summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2010-07-28 01:33:15 +0000
committerDevang Patel <dpatel@apple.com>2010-07-28 01:33:15 +0000
commita652fab0527c8ceb681c4c336b45dda0db8fc058 (patch)
tree791939a6476f7a25adcfc9954bed5f96f8cb1819 /clang/lib
parent7a066723d0d92ae4cae3f2e3d87ac996c792072c (diff)
downloadbcm5719-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.cpp38
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:
OpenPOWER on IntegriCloud