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