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
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 56db548..3350640 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -9761,7 +9761,11 @@
 
   // 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 0000000..519e655
--- /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 0000000..eb9d72e
--- /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