]> granicus.if.org Git - clang/commitdiff
Don't crash in Sema::IsSimplyAccessible if the declaration is not a C++ class member...
authorDouglas Gregor <dgregor@apple.com>
Mon, 10 Oct 2011 23:44:35 +0000 (23:44 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 10 Oct 2011 23:44:35 +0000 (23:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141600 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaAccess.cpp
test/Index/complete-qualified.cpp [new file with mode: 0644]

index d322ebd410078f12f1149a7baefc71a1fae9c056..6cd9230326850be7f06e59af827bd77fc4c7d512 100644 (file)
@@ -1652,7 +1652,7 @@ void Sema::CheckLookupAccess(const LookupResult &R) {
 /// \param Class the class/context from which to start the search
 /// \return true if the Decl is accessible from the Class, false otherwise.
 bool Sema::IsSimplyAccessible(NamedDecl *Decl, CXXRecordDecl *Class) {
-  if (!Class)
+  if (!Class || !Decl->isCXXClassMember())
     return true;
 
   QualType qType = Class->getTypeForDecl()->getCanonicalTypeInternal();
diff --git a/test/Index/complete-qualified.cpp b/test/Index/complete-qualified.cpp
new file mode 100644 (file)
index 0000000..20f5105
--- /dev/null
@@ -0,0 +1,20 @@
+template <typename X, typename Y>
+class C
+{
+};
+
+class Foo
+{
+public:
+  C<Foo, class Bar> c;
+};
+
+void foo()
+{
+  Foo::
+
+// RUN: c-index-test -code-completion-at=%s:14:8 %s -o - | FileCheck -check-prefix=CC1 %s
+// CHECK-CC1: FieldDecl:{ResultType C<Foo, class Bar>}{TypedText c} (35)
+// CHECK-CC1: ClassDecl:{TypedText Foo} (35)
+// CHECK-CC1: CXXMethod:{ResultType Foo &}{TypedText operator=}{LeftParen (}{Placeholder const Foo &}{RightParen )} (35)
+// CHECK-CC1: CXXDestructor:{ResultType void}{TypedText ~Foo}{LeftParen (}{RightParen )} (35)