[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