aaron.ballman added inline comments.

================
Comment at: lib/Sema/SemaAccess.cpp:1871-1873
+    // The access should be AS_none as we don't know how the member was
+    // accessed - `AccessedEntity::getAccess` describes what access was used to
+    // access an entity.
----------------
ioeric wrote:
> aaron.ballman wrote:
> > This seems to contradict the function-level comment that says the check 
> > seems to only take the access specifiers into account and not how the 
> > member is accessed.
> > not how the member is accessed.
> It's not very clear to me what exactly this means.  But I think we are still 
> not taking how member was accessed into account. The access in 
> `DeclAccessPair` describes how a member was accessed, and this should be None 
> instead of the access specifier of the member as we don't have this 
> information here. 
> 
> I updated the wording in the comment to make this a bit clearer.
I'm still wondering about the removal of the public access check -- if the 
declaration has a public access specifier, that early return saves work. So 
`Entity` may still require passing `AS_none` but we might want to continue to 
check `Decl->getAccess() == AS_public` for the early return?

(Drive-by nit that's not yours: `Decl` is the name of a type, so if you wanted 
to rename the parameter to something that isn't a type name, I would not be 
sad, but you're not required to do it.)


================
Comment at: lib/Sema/SemaCodeComplete.cpp:1316-1317
+        //   void D::f() { this->^; }
+        // The completion after "this->" will have `InBaseClass` set to true 
and
+        // `Ctx` set to "B". We need to set the actual accessing context (i.e.
+        // naming class) to "D" so that access can be calculated correctly.
----------------
ioeric wrote:
> aaron.ballman wrote:
> > This makes it sound like the caller has messed something up, but I'm also 
> > pretty unfamiliar with the code completion logic. Why would `InBaseClass` 
> > be true for that completion point and why would the context be set to `B`?
> It's a bit messy, but this is roughly how lookup inside a class, say D,works:
> 1. lookup inside the class (InBaseClass = false, Context=D).
> 2. Run the same lookup on all base classes (InBaseClass=true, Context=B). 
> (https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaLookup.cpp#L3584)
> 
> So, `InBaseClass` would be true when a lookup starts from a derived class. 
Ah, thank you for the explanation; that helps.


Repository:
  rC Clang

https://reviews.llvm.org/D49421



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to