From e861c60bde74cf495447f50844d7ee7ea3a8a7a0 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Wed, 30 Jun 2010 02:59:29 +0000 Subject: Reapply r107235, this time with both my typo fixed, and a logical bug fixed. Previously we relied on the presence of a member which needs no initialization to prevent us from creating an additional initialization of the outer anonymous union field. We have already correctly marked that field as initialized by the member of the union (repeatedly due to the original bug this patch fixes) so we simply need to bail out. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107242 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/SemaCXX/constructor-initializer.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'test/SemaCXX/constructor-initializer.cpp') diff --git a/test/SemaCXX/constructor-initializer.cpp b/test/SemaCXX/constructor-initializer.cpp index 8e9e133d94..cf309f5597 100644 --- a/test/SemaCXX/constructor-initializer.cpp +++ b/test/SemaCXX/constructor-initializer.cpp @@ -204,3 +204,20 @@ C f(C c) { } } + +// Don't build implicit initializers for anonymous union fields when we already +// have an explicit initializer for another field in the union. +namespace PR7402 { + struct S { + union { + void* ptr_; + struct { int i_; }; + }; + + template S(T) : ptr_(0) { } + }; + + void f() { + S s(3); + } +} -- cgit v1.2.3-70-g09d2