aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/init.c15
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/init/array8.C12
4 files changed, 26 insertions, 10 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ce7f829..3234883 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2002-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ * init.c (expand_default_init): Handle brace-enclosed initializers
+ correctly.
+
2002-10-16 Mark Mitchell <mark@codesourcery.com>
* mangle.c (write_expression): Correct handling of enumeration
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 3e71e9f..a7db626 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 d8ebf36..75bf169 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/init/array8.C: New test.
+
2002-10-17 Richard Sandiford <rsandifo@redhat.com>
* 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 0000000..5f28ca4
--- /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 } };