[PATCH] D24969: [Sema] Use the instantiated name of destructors in FindInstantiatedDecl and RebuildMemberExpr

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 31 12:07:06 PST 2017


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 at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list