From: Francois Pichet Date: Thu, 9 Dec 2010 10:07:54 +0000 (+0000) Subject: Fix PR8760: IndirectFieldDecl Type was not updated during template instantiation. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=40e17752086c2c497951d64f5ac6ab5039466113;p=clang Fix PR8760: IndirectFieldDecl Type was not updated during template instantiation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121363 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index e3b8cfe751..f98efec5ed 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/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/test/CodeGenCXX/anonymous-union-member-initializer.cpp b/test/CodeGenCXX/anonymous-union-member-initializer.cpp index 9ba38052e1..187164e3fa 100644 --- a/test/CodeGenCXX/anonymous-union-member-initializer.cpp +++ b/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; + +