From: Adrian Prantl Date: Fri, 17 May 2013 23:49:10 +0000 (+0000) Subject: ObjC Debug Info: Emit the correct method names for accessors for X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=687ecae11966c3cf098dda03d229770b14de53ed;p=clang ObjC Debug Info: Emit the correct method names for accessors for properties declared in a protocol. rdar://problem/13798000 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182176 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 14c92e6669..a0187186ff 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -161,6 +161,13 @@ StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) { dyn_cast(DC)){ OS << ((const NamedDecl *)OCD)->getIdentifier()->getNameStart() << '(' << OCD->getIdentifier()->getNameStart() << ')'; + } else if (isa(DC)) { + // We can extract the type of the class from the self pointer. + if (ImplicitParamDecl* SelfDecl = OMD->getSelfDecl()) { + QualType ClassTy = + cast(SelfDecl->getType())->getPointeeType(); + ClassTy.print(OS, PrintingPolicy(LangOptions())); + } } OS << ' ' << OMD->getSelector().getAsString() << ']'; diff --git a/test/CodeGenObjC/debuginfo-properties.m b/test/CodeGenObjC/debuginfo-properties.m new file mode 100644 index 0000000000..9a35714583 --- /dev/null +++ b/test/CodeGenObjC/debuginfo-properties.m @@ -0,0 +1,35 @@ +// RUN: %clang_cc1 -g -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s +// Check that we emit the correct method names for properties from a protocol. +// rdar://problem/13798000 +@protocol NSObject +- (id)init; +@end +@interface NSObject {} +@end + +@class Selection; + +@protocol HasASelection +@property (nonatomic, retain) Selection* selection; +// CHECK: [ DW_TAG_subprogram ] [line [[@LINE-1]]] [local] [def] [-[MyClass selection]] +// CHECK: [ DW_TAG_subprogram ] [line [[@LINE-2]]] [local] [def] [-[MyClass setSelection:]] +// CHECK: [ DW_TAG_subprogram ] [line [[@LINE-3]]] [local] [def] [-[OtherClass selection]] +// CHECK: [ DW_TAG_subprogram ] [line [[@LINE-4]]] [local] [def] [-[OtherClass setSelection:]] +@end + +@interface MyClass : NSObject { + Selection *_selection; +} +@end + +@implementation MyClass +@synthesize selection = _selection; +@end + +@interface OtherClass : NSObject { + Selection *_selection; +} +@end +@implementation OtherClass +@synthesize selection = _selection; +@end