From b216f69b04b7fea3c554235274820eb9ec2ebf7f Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Thu, 17 Oct 2002 07:40:35 +0000 Subject: [PATCH] init.c (expand_default_init): Handle brace-enclosed initializers correctly. * init.c (expand_default_init): Handle brace-enclosed initializers correctly. * g++.dg/init/array8.C: New test. From-SVN: r58245 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/init.c | 15 +++++---------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/init/array8.C | 12 ++++++++++++ 4 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/g++.dg/init/array8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ce7f82939d8..32348833032 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2002-10-17 Mark Mitchell + + * init.c (expand_default_init): Handle brace-enclosed initializers + correctly. + 2002-10-16 Mark Mitchell * mangle.c (write_expression): Correct handling of enumeration diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 3e71e9f1a86..a7db6267853 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1181,17 +1181,12 @@ expand_default_init (binfo, true_exp, exp, init, flags) to run a new constructor; and catching an exception, where we have already built up the constructor call so we could wrap it in an exception region. */; - else if (TREE_CODE (init) == CONSTRUCTOR) + else if (TREE_CODE (init) == CONSTRUCTOR + && TREE_HAS_CONSTRUCTOR (init)) { - if (!TYPE_HAS_CONSTRUCTOR (type)) - /* A brace-enclosed initializer has whatever type is - required. There's no need to convert it. */ - ; - else - init = ocp_convert (type, - TREE_VALUE (CONSTRUCTOR_ELTS (init)), - CONV_IMPLICIT | CONV_FORCE_TEMP, - flags); + /* A brace-enclosed initializer for an aggregate. */ + my_friendly_assert (CP_AGGREGATE_TYPE_P (type), 20021016); + init = digest_init (type, init, (tree *)NULL); } else init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d8ebf360424..75bf1695f83 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-10-17 Mark Mitchell + + * g++.dg/init/array8.C: New test. + 2002-10-17 Richard Sandiford * gcc.dg/special/mips-abi.exp: New test. diff --git a/gcc/testsuite/g++.dg/init/array8.C b/gcc/testsuite/g++.dg/init/array8.C new file mode 100644 index 00000000000..5f28ca490e7 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array8.C @@ -0,0 +1,12 @@ +struct A { + A (); +}; + +struct B { + A a1; + A a2; +}; + +A a; + +struct B b[] = { { a, a }, { a, a } }; -- 2.30.2