diff options
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateDecl.cpp | 1 | ||||
-rw-r--r-- | test/CodeGenCXX/member-templates.cpp | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index 34dc947422..bda19f1e98 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -205,6 +205,7 @@ Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D) { // we don't want to redo all the checking, especially since the // initializer might have been wrapped by a CXXConstructExpr since we did // it the first time. + Var->setType(D->getType()); Var->setInit(SemaRef.Context, Init.takeAs<Expr>()); } else if (ParenListExpr *PLE = dyn_cast<ParenListExpr>((Expr *)Init.get())) { diff --git a/test/CodeGenCXX/member-templates.cpp b/test/CodeGenCXX/member-templates.cpp index d85d6394f0..c8494c42ce 100644 --- a/test/CodeGenCXX/member-templates.cpp +++ b/test/CodeGenCXX/member-templates.cpp @@ -18,3 +18,14 @@ template<typename T> B::B(T) {} // CHECK: define void @_ZN1BC1IiEET_(%struct.B* %this, i32) // CHECK: define void @_ZN1BC2IiEET_(%struct.B* %this, i32) template B::B(int); + +template<typename T> +struct C { + void f() { + int a[] = { 1, 2, 3 }; + } +}; + +void f(C<int>& c) { + c.f(); +} |