[prev in list] [next in list] [prev in thread] [next in thread]
List: cfe-commits
Subject: Re: [PATCH] D24969: [Sema] Use the instantiated name of destructors in FindInstantiatedDecl and Rebu
From: Hans Wennborg via cfe-commits <cfe-commits () lists ! llvm ! org>
Date: 2017-01-31 22:49:21
Message-ID: CAB8jPhcr17gnpT8B2Vcf8c876N-t7QMjq1v2O2A28_AW8PSQKQ () mail ! gmail ! com
[Download RAW message or body]
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.
On Tue, Jan 31, 2017 at 12:07 PM, Akira Hatanaka <ahatanaka@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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic