[cfe-commits] r80826 - in /cfe/trunk: lib/Sema/SemaTemplateInstantiateDecl.cpp test/CodeGenCXX/template-anonymous-union-member-initializer.cpp

Anders Carlsson andersca at mac.com
Wed Sep 2 12:17:55 PDT 2009


Author: andersca
Date: Wed Sep  2 14:17:55 2009
New Revision: 80826

URL: http://llvm.org/viewvc/llvm-project?rev=80826&view=rev
Log:
Fix a codegen crash when a class template has a constructor that does member initialization of an anonymous union.

Added:
    cfe/trunk/test/CodeGenCXX/template-anonymous-union-member-initializer.cpp
Modified:
    cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp

Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=80826&r1=80825&r2=80826&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Wed Sep  2 14:17:55 2009
@@ -242,17 +242,19 @@
                                             D->getTypeSpecStartLoc(),
                                             D->getAccess(),
                                             0);
-  if (Field) {
-    if (Invalid)
-      Field->setInvalidDecl();
-    
-    if (!Field->getDeclName()) {
-      // Keep track of where this decl came from.
-      SemaRef.Context.setInstantiatedFromUnnamedFieldDecl(Field, D);
-    }
+  if (!Field)
+    return 0;
+  
+  if (Invalid)
+    Field->setInvalidDecl();
     
-    Owner->addDecl(Field);
+  if (!Field->getDeclName()) {
+    // Keep track of where this decl came from.
+    SemaRef.Context.setInstantiatedFromUnnamedFieldDecl(Field, D);
   }
+    
+  Field->setImplicit(D->isImplicit());
+  Owner->addDecl(Field);
 
   return Field;
 }

Added: cfe/trunk/test/CodeGenCXX/template-anonymous-union-member-initializer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/template-anonymous-union-member-initializer.cpp?rev=80826&view=auto

==============================================================================
--- cfe/trunk/test/CodeGenCXX/template-anonymous-union-member-initializer.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/template-anonymous-union-member-initializer.cpp Wed Sep  2 14:17:55 2009
@@ -0,0 +1,10 @@
+// RUN: clang-cc -emit-llvm -o %t %s
+template <typename T>
+class A
+{
+    union { void *d; };
+
+    A() : d(0) { }
+};
+
+A<int> a0;





More information about the cfe-commits mailing list