diff options
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 4 | ||||
-rw-r--r-- | clang/test/SemaTemplate/destructor-template.cpp | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 66bf4cea68e..c2dcf748c06 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/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/clang/test/SemaTemplate/destructor-template.cpp b/clang/test/SemaTemplate/destructor-template.cpp index 07beda40aaa..6806c24a84e 100644 --- a/clang/test/SemaTemplate/destructor-template.cpp +++ b/clang/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(); + } +} |