diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index e3b8cfe751ca..f98efec5ed25 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -467,9 +467,10 @@ Decl *TemplateDeclInstantiator::VisitIndirectFieldDecl(IndirectFieldDecl *D) { NamedChain[i++] = (SemaRef.FindInstantiatedDecl(D->getLocation(), *PI, TemplateArgs)); + QualType T = cast(NamedChain[i-1])->getType(); IndirectFieldDecl* IndirectField = IndirectFieldDecl::Create(SemaRef.Context, Owner, D->getLocation(), - D->getIdentifier(), D->getType(), + D->getIdentifier(), T, NamedChain, D->getChainingSize()); diff --git a/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp b/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp index 9ba38052e172..187164e3fa91 100644 --- a/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp +++ b/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp @@ -90,3 +90,16 @@ struct S { }; }; } s; + + + //PR8760 + template + struct Foo { + Foo() : ptr(__nullptr) {} + union { + T *ptr; + }; + }; + Foo f; + +