erichkeane added inline comments.
================ Comment at: clang/test/SemaTemplate/concepts.cpp:391 + + CausesFriendConstraint<int> CFC; + FriendFunc(CFC, 1); ---------------- ChuanqiXu wrote: > erichkeane wrote: > > erichkeane wrote: > > > A bunch of the tests below this all fail. > > See these two tests, which fail by saying that "::local is not a member of > > class 'X'". > I've spent some time to look into this. I don't find the root cause now. But > I find that it is related to the wrong lookups. The error is emitted in > CheckQualifiedMemberReference. And it looks like we lookup for the original S > instead of the instantiated S. And the compiler thinks the 2 structs are > different. So here is the error. Do you have any other ideas? I unfortunately had little time to work on this over the weekend, but right before I left on Friday realized that I think the idea of doing `RebuildExprInCurrentInstantiation` was the incorrect one. It ATTEMPTS to rebuild things, but doesn't have enough information to do so (which is the case you're seeing I think?). If I change that back to what I had before in every case, all except `CheckMemberVar::foo` fails (note `foo2` does not!). THAT I have tracked down to `TemplateInstantiator::TransformDecl` failing to actually transform the variable from `S<T>` to `S<int>` as you noticed. It gets me to 3 cases where that function is called, 2 of which work. 1- `CheckMemberVar::foo`: Fails 2- `CheckMemberVar::foo2`: Works 3- Similar example with the instantiation in the BODY of the func: Works I am going to spend more time trying to look into that hopefully early this week. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D119544/new/ https://reviews.llvm.org/D119544 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits