]> granicus.if.org Git - clang/commitdiff
Fix PR8760: IndirectFieldDecl Type was not updated during template instantiation.
authorFrancois Pichet <pichet2000@gmail.com>
Thu, 9 Dec 2010 10:07:54 +0000 (10:07 +0000)
committerFrancois Pichet <pichet2000@gmail.com>
Thu, 9 Dec 2010 10:07:54 +0000 (10:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121363 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiateDecl.cpp
test/CodeGenCXX/anonymous-union-member-initializer.cpp

index e3b8cfe751ca9c4cc8f42ac2ac579fb8462c1716..f98efec5ed255e8f5abe56898e9a207ef6953e0c 100644 (file)
@@ -467,9 +467,10 @@ Decl *TemplateDeclInstantiator::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
     NamedChain[i++] = (SemaRef.FindInstantiatedDecl(D->getLocation(),
                                             *PI, TemplateArgs));
 
+  QualType T = cast<FieldDecl>(NamedChain[i-1])->getType();
   IndirectFieldDecl* IndirectField
     = IndirectFieldDecl::Create(SemaRef.Context, Owner, D->getLocation(),
-                                D->getIdentifier(), D->getType(),
+                                D->getIdentifier(), T,
                                 NamedChain, D->getChainingSize());
 
 
index 9ba38052e1720c0a24078d8f1de972842abfb2be..187164e3fa91a3dbeb264e9439f2583e6849f85c 100644 (file)
@@ -90,3 +90,16 @@ struct S {
     };
   };
 } s;
+
+
+ //PR8760 
+ template <typename T>\r
+  struct Foo {\r
+    Foo() : ptr(__nullptr) {}\r
+    union {\r
+      T *ptr;\r
+   };\r
+  };\r
+  Foo<int> f;\r
+  \r
+  \r