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