Mark a struct definition in an objc container with the TopLevelDeclInObjCContainer bit.

Fixes accurately getting a cursor inside an objc container containing a struct definition,
from a PCH/preamble file.

rdar://12584613

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173811 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Argyrios Kyrtzidis 2013-01-29 18:00:54 +00:00
parent f1579605ad
commit 3d207e76a1
3 changed files with 34 additions and 1 deletions

View File

@ -9761,7 +9761,11 @@ void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD,
// Exit this scope of this tag's definition.
PopDeclContext();
if (getCurLexicalContext()->isObjCContainer() &&
Tag->getDeclContext()->isFileContext())
Tag->setTopLevelDeclInObjCContainer();
// Notify the consumer that we've defined a tag.
Consumer.HandleTagDeclDefinition(Tag);
}

View File

@ -0,0 +1,8 @@
@interface I {
struct AA {
int x;
} aa;
int var;
}
-(id)foo;
@end

View File

@ -0,0 +1,21 @@
#include "getcursor-preamble.h"
// RUN: c-index-test -cursor-at=%S/getcursor-preamble.h:2:10 \
// RUN: -cursor-at=%S/getcursor-preamble.h:3:9 \
// RUN: -cursor-at=%S/getcursor-preamble.h:4:6 \
// RUN: -cursor-at=%S/getcursor-preamble.h:5:8 \
// RUN: -cursor-at=%S/getcursor-preamble.h:7:7 \
// RUN: %s | FileCheck %s
// RUN: CINDEXTEST_EDITING=1 c-index-test -cursor-at=%S/getcursor-preamble.h:2:10 \
// RUN: -cursor-at=%S/getcursor-preamble.h:3:9 \
// RUN: -cursor-at=%S/getcursor-preamble.h:4:6 \
// RUN: -cursor-at=%S/getcursor-preamble.h:5:8 \
// RUN: -cursor-at=%S/getcursor-preamble.h:7:7 \
// RUN: %s | FileCheck %s
// CHECK: StructDecl=AA:2:10
// CHECK: FieldDecl=x:3:9
// CHECK: ObjCIvarDecl=aa:4:5
// CHECK: ObjCIvarDecl=var:5:7
// CHECK: ObjCInstanceMethodDecl=foo:7:6