<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Jul 30, 2018 at 5:19 PM Ilya Biryukov via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ibiryukov<br>
Date: Mon Jul 30 08:19:05 2018<br>
New Revision: 338255<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=338255&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=338255&view=rev</a><br>
Log:<br>
[CodeComplete] Fix the crash in code completion on access checking<br>
<br>
Started crashing in r337453. See the added test case for the crash repro.<br>
<br>
The fix reverts part of r337453 that causes the crash and does<br>
not actually break anything when reverted.<br></blockquote></div><div dir="ltr"><div class="gmail_quote"><div>It turns out that this was due to lit's partial string match ... so "something" would match both "something" and "something (inaccessible)" XD </div><div><br></div><div>The protected member bug came up again after the revert, but it was the right thing to do to fix the crash. I'll look into a proper fix.</div></div></div><div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Added:<br>
    cfe/trunk/test/Index/complete-access-checks-crash.cpp<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaCodeComplete.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=338255&r1=338254&r2=338255&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=338255&r1=338254&r2=338255&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaCodeComplete.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp Mon Jul 30 08:19:05 2018<br>
@@ -1303,34 +1303,8 @@ namespace {<br>
     void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx,<br>
                    bool InBaseClass) override {<br>
       bool Accessible = true;<br>
-      if (Ctx) {<br>
-        DeclContext *AccessingCtx = Ctx;<br>
-        // If ND comes from a base class, set the naming class back to the<br>
-        // derived class if the search starts from the derived class (i.e.<br>
-        // InBaseClass is true).<br>
-        //<br>
-        // Example:<br>
-        //   class B { protected: int X; }<br>
-        //   class D : public B { void f(); }<br>
-        //   void D::f() { this->^; }<br>
-        // The completion after "this->" will have `InBaseClass` set to true and<br>
-        // `Ctx` set to "B", when looking up in `B`. We need to set the actual<br>
-        // accessing context (i.e. naming class) to "D" so that access can be<br>
-        // calculated correctly.<br>
-        if (InBaseClass && isa<CXXRecordDecl>(Ctx)) {<br>
-          CXXRecordDecl *RC = nullptr;<br>
-          // Get the enclosing record.<br>
-          for (DeclContext *DC = CurContext; !DC->isFileContext();<br>
-               DC = DC->getParent()) {<br>
-            if ((RC = dyn_cast<CXXRecordDecl>(DC)))<br>
-              break;<br>
-          }<br>
-          if (RC)<br>
-            AccessingCtx = RC;<br>
-        }<br>
-        Accessible = Results.getSema().IsSimplyAccessible(ND, AccessingCtx);<br>
-      }<br>
-<br>
+      if (Ctx)<br>
+        Accessible = Results.getSema().IsSimplyAccessible(ND, Ctx);<br>
       ResultBuilder::Result Result(ND, Results.getBasePriority(ND), nullptr,<br>
                                    false, Accessible, FixIts);<br>
       Results.AddResult(Result, CurContext, Hiding, InBaseClass);<br>
<br>
Added: cfe/trunk/test/Index/complete-access-checks-crash.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-access-checks-crash.cpp?rev=338255&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-access-checks-crash.cpp?rev=338255&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Index/complete-access-checks-crash.cpp (added)<br>
+++ cfe/trunk/test/Index/complete-access-checks-crash.cpp Mon Jul 30 08:19:05 2018<br>
@@ -0,0 +1,13 @@<br>
+struct Base {<br>
+protected:<br>
+  bool bar();<br>
+};<br>
+struct Derived : Base {<br>
+};<br>
+<br>
+struct X {<br>
+  int foo() {<br>
+    Derived(). // RUN: c-index-test -code-completion-at=%s:10:15 %s | FileCheck %s<br>
+    // CHECK: bar{{.*}}(inaccessible)<br>
+  }<br>
+};<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div>