summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/constructor-initializer.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2010-06-30 00:54:29 +0000
committerChandler Carruth <chandlerc@gmail.com>2010-06-30 00:54:29 +0000
commitabb04f730e722e2457cabaec14546439f04ac73c (patch)
tree9f33c86a65c20fc9cead44fd164e6f09b00e6797 /clang/test/SemaCXX/constructor-initializer.cpp
parentb3b89c3bc0e6bce4c1c35f34ae7f85a16ceedd0c (diff)
downloadbcm5719-llvm-abb04f730e722e2457cabaec14546439f04ac73c.tar.gz
bcm5719-llvm-abb04f730e722e2457cabaec14546439f04ac73c.zip
Fix PR7402: We were creating implicit member initializers for every field in an
anonymous union under the presumption that they didn't do anything. While this is true, our checks for redundant initialization of an anonymous union still fire when these overlap with explicit user initialization. A cleaner approach is to avoid initializing multiple members of a union altogether, but this still is in a rather fuzzy are especially when C++0x allows non-POD types into unions. llvm-svn: 107235
Diffstat (limited to 'clang/test/SemaCXX/constructor-initializer.cpp')
-rw-r--r--clang/test/SemaCXX/constructor-initializer.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/constructor-initializer.cpp b/clang/test/SemaCXX/constructor-initializer.cpp
index 8e9e133d94c..bf4b289a908 100644
--- a/clang/test/SemaCXX/constructor-initializer.cpp
+++ b/clang/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 <typename T> S(T) : ptr_(0) { }
+ };
+
+ void f() {
+ MyStruct s(3);
+ }
+}
OpenPOWER on IntegriCloud