On 31 January 2017 at 14:49, Hans Wennborg <h...@chromium.org> wrote:
> Richard, what do you think? I don't believe this fixes a 3.9 > regression, but the fix looks small, so it might be worth it. > I think on the whole the benefit of this change outweighs the risk of it regressing something. > On Tue, Jan 31, 2017 at 12:07 PM, Akira Hatanaka <ahatan...@apple.com> > wrote: > > Thanks for the review. r293678. > > > > Should this be merged to 4.0? > > > >> On Jan 31, 2017, at 12:04 PM, Akira Hatanaka via Phabricator via > cfe-commits <cfe-commits@lists.llvm.org> wrote: > >> > >> This revision was automatically updated to reflect the committed > changes. > >> Closed by commit rL293678: [Sema] Transform a templated name before > looking it up in (authored by ahatanak). > >> > >> Changed prior to commit: > >> https://reviews.llvm.org/D24969?vs=82134&id=86474#toc > >> > >> Repository: > >> rL LLVM > >> > >> https://reviews.llvm.org/D24969 > >> > >> Files: > >> cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp > >> cfe/trunk/lib/Sema/TreeTransform.h > >> cfe/trunk/test/SemaCXX/destructor.cpp > >> > >> > >> Index: cfe/trunk/test/SemaCXX/destructor.cpp > >> =================================================================== > >> --- cfe/trunk/test/SemaCXX/destructor.cpp > >> +++ cfe/trunk/test/SemaCXX/destructor.cpp > >> @@ -431,3 +431,23 @@ > >> > >> // The constructor definition should not have errors > >> Invalid::~Invalid() {} > >> + > >> +namespace PR30361 { > >> +template <typename T> > >> +struct C1 { > >> + ~C1() {} > >> + operator C1<T>* () { return nullptr; } > >> + void foo1(); > >> +}; > >> + > >> +template<typename T> > >> +void C1<T>::foo1() { > >> + C1::operator C1<T>*(); > >> + C1::~C1(); > >> +} > >> + > >> +void foo1() { > >> + C1<int> x; > >> + x.foo1(); > >> +} > >> +} > >> Index: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp > >> =================================================================== > >> --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp > >> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp > >> @@ -4990,8 +4990,12 @@ > >> NamedDecl *Result = nullptr; > >> // FIXME: If the name is a dependent name, this lookup won't > necessarily > >> // find it. Does that ever matter? > >> - if (D->getDeclName()) { > >> - DeclContext::lookup_result Found = ParentDC->lookup(D-> > getDeclName()); > >> + if (auto Name = D->getDeclName()) { > >> + DeclarationNameInfo NameInfo(Name, D->getLocation()); > >> + Name = SubstDeclarationNameInfo(NameInfo, > TemplateArgs).getName(); > >> + if (!Name) > >> + return nullptr; > >> + DeclContext::lookup_result Found = ParentDC->lookup(Name); > >> Result = findInstantiationOf(Context, D, Found.begin(), > Found.end()); > >> } else { > >> // Since we don't have a name for the entity we're looking for, > >> Index: cfe/trunk/lib/Sema/TreeTransform.h > >> =================================================================== > >> --- cfe/trunk/lib/Sema/TreeTransform.h > >> +++ cfe/trunk/lib/Sema/TreeTransform.h > >> @@ -8966,12 +8966,18 @@ > >> // base (and therefore couldn't do the check) and a > >> // nested-name-qualifier (and therefore could do the lookup). > >> NamedDecl *FirstQualifierInScope = nullptr; > >> + DeclarationNameInfo MemberNameInfo = E->getMemberNameInfo(); > >> + if (MemberNameInfo.getName()) { > >> + MemberNameInfo = getDerived().TransformDeclarationNameInfo( > MemberNameInfo); > >> + if (!MemberNameInfo.getName()) > >> + return ExprError(); > >> + } > >> > >> return getDerived().RebuildMemberExpr(Base.get(), FakeOperatorLoc, > >> E->isArrow(), > >> QualifierLoc, > >> TemplateKWLoc, > >> - E->getMemberNameInfo(), > >> + MemberNameInfo, > >> Member, > >> FoundDecl, > >> (E->hasExplicitTemplateArgs() > >> > >> > >> <D24969.86474.patch>_______________________________________________ > >> cfe-commits mailing list > >> cfe-commits@lists.llvm.org > >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits