Kaynağa Gözat

Don't crash in Sema::IsSimplyAccessible if the declaration is not a C++ class member. Fixes PR11108.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141600 91177308-0d34-0410-b5e6-96231b3b80d8
Douglas Gregor 14 yıl önce
ebeveyn
işleme
b008012426
2 değiştirilmiş dosya ile 21 ekleme ve 1 silme
  1. 1 1
      lib/Sema/SemaAccess.cpp
  2. 20 0
      test/Index/complete-qualified.cpp

+ 1 - 1
lib/Sema/SemaAccess.cpp

@@ -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();

+ 20 - 0
test/Index/complete-qualified.cpp

@@ -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)