forked from OSchip/llvm-project
Set a source location for Objective-C accessor stubs
even when there is no explicit synthesize statement. This fixes a regression introduced in https://reviews.llvm.org/D68108 that could lead to missing debug locations in cleanup code in synthesized Objective-C++ properties. rdar://57630879 Differential Revision: https://reviews.llvm.org/D71084
This commit is contained in:
parent
d0b9ed5c49
commit
a1a9aa17b4
|
@ -1058,11 +1058,13 @@ RedeclarePropertyAccessor(ASTContext &Context, ObjCImplementationDecl *Impl,
|
|||
SourceLocation PropertyLoc) {
|
||||
ObjCMethodDecl *Decl = AccessorDecl;
|
||||
ObjCMethodDecl *ImplDecl = ObjCMethodDecl::Create(
|
||||
Context, AtLoc, PropertyLoc, Decl->getSelector(), Decl->getReturnType(),
|
||||
Context, AtLoc.isValid() ? AtLoc : Decl->getBeginLoc(),
|
||||
PropertyLoc.isValid() ? PropertyLoc : Decl->getEndLoc(),
|
||||
Decl->getSelector(), Decl->getReturnType(),
|
||||
Decl->getReturnTypeSourceInfo(), Impl, Decl->isInstanceMethod(),
|
||||
Decl->isVariadic(), Decl->isPropertyAccessor(), /* isSynthesized*/ true,
|
||||
Decl->isImplicit(), Decl->isDefined(), Decl->getImplementationControl(),
|
||||
Decl->hasRelatedResultType());
|
||||
Decl->isVariadic(), Decl->isPropertyAccessor(),
|
||||
/* isSynthesized*/ true, Decl->isImplicit(), Decl->isDefined(),
|
||||
Decl->getImplementationControl(), Decl->hasRelatedResultType());
|
||||
ImplDecl->getMethodFamily();
|
||||
if (Decl->hasAttrs())
|
||||
ImplDecl->setAttrs(Decl->getAttrs());
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
// RUN: %clang_cc1 -ast-dump %s | FileCheck %s
|
||||
|
||||
// Test that accessor stubs for default-synthesized ObjC accessors
|
||||
// have a valid source location.
|
||||
|
||||
__attribute__((objc_root_class))
|
||||
@interface NSObject
|
||||
+ (id)alloc;
|
||||
@end
|
||||
|
||||
@interface NSString : NSObject
|
||||
@end
|
||||
|
||||
@interface MyData : NSObject
|
||||
struct Data {
|
||||
NSString *name;
|
||||
};
|
||||
@property struct Data data;
|
||||
@end
|
||||
// CHECK: ObjCImplementationDecl {{.*}}line:[[@LINE+2]]{{.*}} MyData
|
||||
// CHECK: ObjCMethodDecl {{.*}}col:23 implicit - setData: 'void'
|
||||
@implementation MyData
|
||||
@end
|
Loading…
Reference in New Issue