зеркало из https://github.com/microsoft/clang-1.git
[libclang/AST]
AST: For auto-synthesized ivars give them the location of the related property (previously they had no source location). This allows them to be indexed by libclang. libclang: Make sure synthesized ivars are indexed before the methods that may reference them. Fixes rdar://11607001. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158189 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
19b17cb57a
Коммит
390fff8e8b
|
@ -1502,7 +1502,7 @@ void Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl* IMPDecl,
|
|||
true,
|
||||
/* property = */ Prop->getIdentifier(),
|
||||
/* ivar = */ getDefaultSynthIvarName(Prop, Context),
|
||||
SourceLocation()));
|
||||
Prop->getLocation()));
|
||||
if (PIDecl) {
|
||||
Diag(Prop->getLocation(), diag::warn_missing_explicit_synthesis);
|
||||
Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);
|
||||
|
|
|
@ -11,11 +11,21 @@
|
|||
@synthesize prop = _prop;
|
||||
@end
|
||||
|
||||
rdar://11015325
|
||||
// rdar://11015325
|
||||
@interface I1
|
||||
__attribute__((something)) @interface I2 @end
|
||||
@end
|
||||
|
||||
@interface I3
|
||||
@property (assign,readwrite) id auto_prop;
|
||||
@end
|
||||
|
||||
@implementation I3
|
||||
-(void)meth {
|
||||
_auto_prop = 0;
|
||||
}
|
||||
@end
|
||||
|
||||
// RUN: c-index-test -index-file %s > %t
|
||||
// RUN: FileCheck %s -input-file=%t
|
||||
// CHECK: [indexDeclaration]: kind: objc-class | name: I | {{.*}} | loc: 1:12
|
||||
|
@ -28,3 +38,6 @@ __attribute__((something)) @interface I2 @end
|
|||
// CHECK: [indexDeclaration]: kind: objc-ivar | name: _prop | {{.*}} | loc: 11:20
|
||||
// CHECK: [indexDeclaration]: kind: objc-instance-method | name: prop | {{.*}} | loc: 11:13 | {{.*}} | lexical-container: [I:10:17]
|
||||
// CHECK: [indexDeclaration]: kind: objc-instance-method | name: setProp: | {{.*}} | loc: 11:13 | {{.*}} | lexical-container: [I:10:17]
|
||||
|
||||
// CHECK: [indexDeclaration]: kind: objc-ivar | name: _auto_prop | {{.*}} | loc: 20:33
|
||||
// CHECK: [indexEntityReference]: kind: objc-ivar | name: _auto_prop | {{.*}} | loc: 25:3
|
||||
|
|
|
@ -154,7 +154,20 @@ public:
|
|||
IndexCtx.handleObjCImplementation(D);
|
||||
|
||||
IndexCtx.indexTUDeclsInObjCContainer();
|
||||
IndexCtx.indexDeclContext(D);
|
||||
|
||||
// Index the ivars first to make sure the synthesized ivars are indexed
|
||||
// before indexing the methods that can reference them.
|
||||
for (ObjCImplementationDecl::ivar_iterator
|
||||
IvarI = D->ivar_begin(),
|
||||
IvarE = D->ivar_end(); IvarI != IvarE; ++IvarI) {
|
||||
IndexCtx.indexDecl(*IvarI);
|
||||
}
|
||||
for (DeclContext::decl_iterator
|
||||
I = D->decls_begin(), E = D->decls_end(); I != E; ++I) {
|
||||
if (!isa<ObjCIvarDecl>(*I))
|
||||
IndexCtx.indexDecl(*I);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче