diff options
-rw-r--r-- | lib/Sema/TreeTransform.h | 4 | ||||
-rw-r--r-- | test/SemaTemplate/destructor-template.cpp | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 66bf4cea68..c2dcf748c0 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -7459,7 +7459,9 @@ TreeTransform<Derived>::TransformCXXPseudoDestructorExpr( TypeSourceInfo *ScopeTypeInfo = 0; if (E->getScopeTypeInfo()) { - ScopeTypeInfo = getDerived().TransformType(E->getScopeTypeInfo()); + CXXScopeSpec EmptySS; + ScopeTypeInfo = getDerived().TransformTypeInObjectScope( + E->getScopeTypeInfo(), ObjectType, 0, EmptySS); if (!ScopeTypeInfo) return ExprError(); } diff --git a/test/SemaTemplate/destructor-template.cpp b/test/SemaTemplate/destructor-template.cpp index 07beda40aa..6806c24a84 100644 --- a/test/SemaTemplate/destructor-template.cpp +++ b/test/SemaTemplate/destructor-template.cpp @@ -57,3 +57,22 @@ namespace PR7904 { }; Foo f; } + +namespace rdar13140795 { + template <class T> class shared_ptr {}; + + template <typename T> struct Marshal { + static int gc(); + }; + + + template <typename T> int Marshal<T>::gc() { + shared_ptr<T> *x; + x->template shared_ptr<T>::~shared_ptr(); + return 0; + } + + void test() { + Marshal<int>::gc(); + } +} |