diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-02 17:08:57 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-02 17:08:57 -0400 |
commit | adc651f305521e0e8e46fe1fee904532140d7a5e (patch) | |
tree | 85932c48fd6620e32bfa62016f01cc224040919c | |
parent | 9f8139900d3b6be84b303ad505cf5899e95d8ea2 (diff) | |
download | gcc-adc651f305521e0e8e46fe1fee904532140d7a5e.zip gcc-adc651f305521e0e8e46fe1fee904532140d7a5e.tar.gz gcc-adc651f305521e0e8e46fe1fee904532140d7a5e.tar.bz2 |
re PR c++/49803 ([C++0x] erroneous variant-member initialization in a union containing an anonymous struct)
PR c++/49803
* init.c (sort_mem_initializers): Initialize uses_unions_p here.
(build_field_list): Not here.
From-SVN: r177213
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/init.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/union5.C | 23 |
4 files changed, 33 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bba80e8..dc138a1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-08-02 Jason Merrill <jason@redhat.com> + PR c++/49803 + * init.c (sort_mem_initializers): Initialize uses_unions_p here. + (build_field_list): Not here. + PR c++/49834 * parser.c (build_range_temp): Split out from... (cp_convert_range_for): ...here. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 52b9484..31171cf 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -655,8 +655,6 @@ build_field_list (tree t, tree list, int *uses_unions_p) { tree fields; - *uses_unions_p = 0; - /* Note whether or not T is a union. */ if (TREE_CODE (t) == UNION_TYPE) *uses_unions_p = 1; @@ -710,7 +708,7 @@ sort_mem_initializers (tree t, tree mem_inits) tree next_subobject; VEC(tree,gc) *vbases; int i; - int uses_unions_p; + int uses_unions_p = 0; /* Build up a list of initializations. The TREE_PURPOSE of entry will be the subobject (a FIELD_DECL or BINFO) to initialize. The diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82f2776..6b47169 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-08-02 Jason Merrill <jason@redhat.com> + + PR c++/49803 + * g++.dg/cpp0x/union5.C: New. + 2011-08-02 Daniel Kraft <d@domob.eu> PR fortran/49885 diff --git a/gcc/testsuite/g++.dg/cpp0x/union5.C b/gcc/testsuite/g++.dg/cpp0x/union5.C new file mode 100644 index 0000000..423b348 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/union5.C @@ -0,0 +1,23 @@ +// PR c++/49803 +// { dg-options -std=c++0x } + +struct X +{ + X() = delete; +}; + +union Y +{ + // N3291=11-0061 12.6.2/8 says no initialization of + // of other variant members (i.e. m_x) should + // be performed. + Y() : m_char1{ } + { } + + struct + { + char m_char1; + }; + + X m_x; +}; |