summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGDebugInfo.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2012-02-07 18:40:30 +0000
committerDevang Patel <dpatel@apple.com>2012-02-07 18:40:30 +0000
commit37a5c9564d37cfc473dac991861a93db7c5ffc10 (patch)
treeb85f49d6a0558ba3738e4bfe8d557daeda20dc63 /clang/lib/CodeGen/CGDebugInfo.cpp
parentf98fc08bc710b581a02fe23cfb21d84048af9a69 (diff)
downloadbcm5719-llvm-37a5c9564d37cfc473dac991861a93db7c5ffc10.tar.gz
bcm5719-llvm-37a5c9564d37cfc473dac991861a93db7c5ffc10.zip
Emit debug info for properites that are not backed by an ivar.
llvm-svn: 149995
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 5127159e016..47aaf43dd47 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1307,8 +1307,18 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
EltTys.push_back(InhTag);
}
+ for (ObjCContainerDecl::prop_iterator I = ID->prop_begin(),
+ E = ID->prop_end(); I != E; ++I) {
+ const ObjCPropertyDecl *PD = *I;
+ llvm::MDNode *PropertyNode =
+ DBuilder.createObjCProperty(PD->getName(),
+ getSelectorName(PD->getGetterName()),
+ getSelectorName(PD->getSetterName()),
+ PD->getPropertyAttributes());
+ EltTys.push_back(PropertyNode);
+ }
+
const ASTRecordLayout &RL = CGM.getContext().getASTObjCInterfaceLayout(ID);
- ObjCImplementationDecl *ImpD = ID->getImplementation();
unsigned FieldNo = 0;
for (ObjCIvarDecl *Field = ID->all_declared_ivar_begin(); Field;
Field = Field->getNextIvar(), ++FieldNo) {
@@ -1351,26 +1361,18 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
else if (Field->getAccessControl() == ObjCIvarDecl::Private)
Flags = llvm::DIDescriptor::FlagPrivate;
- StringRef PropertyName;
- StringRef PropertyGetter;
- StringRef PropertySetter;
- unsigned PropertyAttributes = 0;
- ObjCPropertyDecl *PD = NULL;
llvm::MDNode *PropertyNode = NULL;
- if (ImpD)
+ if (ObjCImplementationDecl *ImpD = ID->getImplementation()) {
if (ObjCPropertyImplDecl *PImpD =
- ImpD->FindPropertyImplIvarDecl(Field->getIdentifier()))
- PD = PImpD->getPropertyDecl();
- if (PD) {
- PropertyName = PD->getName();
- PropertyGetter = getSelectorName(PD->getGetterName());
- PropertySetter = getSelectorName(PD->getSetterName());
- PropertyAttributes = PD->getPropertyAttributes();
- PropertyNode =
- DBuilder.createObjCProperty(PropertyName, PropertyGetter,
- PropertySetter,
- PropertyAttributes);
- EltTys.push_back(PropertyNode);
+ ImpD->FindPropertyImplIvarDecl(Field->getIdentifier())) {
+ if (ObjCPropertyDecl *PD = PImpD->getPropertyDecl()) {
+ PropertyNode =
+ DBuilder.createObjCProperty(PD->getName(),
+ getSelectorName(PD->getGetterName()),
+ getSelectorName(PD->getSetterName()),
+ PD->getPropertyAttributes());
+ }
+ }
}
FieldTy = DBuilder.createObjCIVar(FieldName, FieldDefUnit,
FieldLine, FieldSize, FieldAlign,
OpenPOWER on IntegriCloud