aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-01-29 18:00:54 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-01-29 18:00:54 +0000
commit3d207e76a1c7ece5deec3d6ee35af04fe7f6212e (patch)
treee841f39719b5abfa5c13a8ece6863cf4231d99e3
parentf1579605adf03f94a2ddddc95c764737ead0efe5 (diff)
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
-rw-r--r--lib/Sema/SemaDecl.cpp6
-rw-r--r--test/Index/getcursor-preamble.h8
-rw-r--r--test/Index/getcursor-preamble.m21
3 files changed, 34 insertions, 1 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 56db548aa6..33506401cf 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -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);
}
diff --git a/test/Index/getcursor-preamble.h b/test/Index/getcursor-preamble.h
new file mode 100644
index 0000000000..519e655c6e
--- /dev/null
+++ b/test/Index/getcursor-preamble.h
@@ -0,0 +1,8 @@
+@interface I {
+ struct AA {
+ int x;
+ } aa;
+ int var;
+}
+-(id)foo;
+@end
diff --git a/test/Index/getcursor-preamble.m b/test/Index/getcursor-preamble.m
new file mode 100644
index 0000000000..eb9d72e2b6
--- /dev/null
+++ b/test/Index/getcursor-preamble.m
@@ -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