]> granicus.if.org Git - clang/commitdiff
When we need the complete set of visible declarations from a
authorDouglas Gregor <dgregor@apple.com>
Fri, 17 Aug 2012 05:26:33 +0000 (05:26 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 17 Aug 2012 05:26:33 +0000 (05:26 +0000)
declaration context, check whether the primary context---not the
current context---has any external visible declarations. Fixes
PR13616.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162083 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclLookups.h
test/Index/complete-preamble.cpp [new file with mode: 0644]
test/Index/complete-preamble.h [new file with mode: 0644]

index b8abe97be1fbc3efd5073388f23e7b131ebafb10..867b4652575336daa535cff7eb04cc367f3f89e2 100644 (file)
@@ -67,7 +67,7 @@ public:
 
 DeclContext::all_lookups_iterator DeclContext::lookups_begin() const {
   DeclContext *Primary = const_cast<DeclContext*>(this)->getPrimaryContext();
-  if (hasExternalVisibleStorage())
+  if (Primary->hasExternalVisibleStorage())
     getParentASTContext().getExternalSource()->completeVisibleDeclsMap(Primary);
   if (StoredDeclsMap *Map = Primary->buildLookup())
     return all_lookups_iterator(Map->begin(), Map->end());
@@ -76,7 +76,7 @@ DeclContext::all_lookups_iterator DeclContext::lookups_begin() const {
 
 DeclContext::all_lookups_iterator DeclContext::lookups_end() const {
   DeclContext *Primary = const_cast<DeclContext*>(this)->getPrimaryContext();
-  if (hasExternalVisibleStorage())
+  if (Primary->hasExternalVisibleStorage())
     getParentASTContext().getExternalSource()->completeVisibleDeclsMap(Primary);
   if (StoredDeclsMap *Map = Primary->buildLookup())
     return all_lookups_iterator(Map->end(), Map->end());
diff --git a/test/Index/complete-preamble.cpp b/test/Index/complete-preamble.cpp
new file mode 100644 (file)
index 0000000..8f48105
--- /dev/null
@@ -0,0 +1,8 @@
+#include "complete-preamble.h"
+void f() {
+  std::
+}
+
+// RUN: env CINDEXTEST_EDITING=1 c-index-test -code-completion-at=%s:3:8 %s -o - | FileCheck -check-prefix=CC1 %s
+// CHECK-CC1: {ResultType void}{TypedText wibble}{LeftParen (}{RightParen )} (50) (parent: Namespace 'std')
+
diff --git a/test/Index/complete-preamble.h b/test/Index/complete-preamble.h
new file mode 100644 (file)
index 0000000..e696284
--- /dev/null
@@ -0,0 +1,6 @@
+namespace std {
+  void wibble();
+}
+
+namespace std {
+}