[PATCH] D24969: [Sema] Use the instantiated name of destructors in FindInstantiatedDecl and RebuildMemberExpr
Akira Hatanaka via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 20 10:50:07 PST 2016
ahatanak updated this revision to Diff 82120.
ahatanak added a comment.
Call TransformDeclarationNameInfo unconditionally to transform NameInfo rather than doing so only for destructors. I think this is a cleaner fix.
https://reviews.llvm.org/D24969
Files:
lib/Sema/SemaTemplateInstantiateDecl.cpp
lib/Sema/TreeTransform.h
test/SemaCXX/destructor.cpp
Index: test/SemaCXX/destructor.cpp
===================================================================
--- test/SemaCXX/destructor.cpp
+++ 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: lib/Sema/TreeTransform.h
===================================================================
--- lib/Sema/TreeTransform.h
+++ lib/Sema/TreeTransform.h
@@ -8763,12 +8763,14 @@
// base (and therefore couldn't do the check) and a
// nested-name-qualifier (and therefore could do the lookup).
NamedDecl *FirstQualifierInScope = nullptr;
+ DeclarationNameInfo MemberNameInfo =
+ getDerived().TransformDeclarationNameInfo(E->getMemberNameInfo());
return getDerived().RebuildMemberExpr(Base.get(), FakeOperatorLoc,
E->isArrow(),
QualifierLoc,
TemplateKWLoc,
- E->getMemberNameInfo(),
+ MemberNameInfo,
Member,
FoundDecl,
(E->hasExplicitTemplateArgs()
Index: lib/Sema/SemaTemplateInstantiateDecl.cpp
===================================================================
--- lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -4846,8 +4846,10 @@
}
NamedDecl *Result = nullptr;
- 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();
+ 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,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24969.82120.patch
Type: text/x-patch
Size: 2318 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161220/78049a4e/attachment.bin>
More information about the cfe-commits
mailing list