diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-11-01 00:07:10 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-11-01 00:07:10 +0000 |
commit | 80439563c5704b4daca5e0dbc898771523354645 (patch) | |
tree | ec81a164c2f746c8558e3f7779a015d4d716b7c0 /gcc/testsuite | |
parent | 8d511b90979177c471d1b96aad76ec064bd3b517 (diff) | |
download | gcc-80439563c5704b4daca5e0dbc898771523354645.zip gcc-80439563c5704b4daca5e0dbc898771523354645.tar.gz gcc-80439563c5704b4daca5e0dbc898771523354645.tar.bz2 |
re PR c++/15172 (Copy constructor optimization in aggregate initialization)
PR c++/15172
* typeck2.c (store_init_value): Use split_nonconstant_init even
for types that require construction.
PR c++/15172
* g++.dg/init/aggr2.C: New test.
From-SVN: r89922
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/aggr2.C | 46 |
2 files changed, 51 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d4ecff0..994723e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-10-31 Mark Mitchell <mark@codesourcery.com> + + PR c++/15172 + * g++.dg/init/aggr2.C: New test. + 2004-10-30 Ziemowit Laski <zlaski@apple.com> * objc.dg/local-decl-1.m: New test. diff --git a/gcc/testsuite/g++.dg/init/aggr2.C b/gcc/testsuite/g++.dg/init/aggr2.C new file mode 100644 index 0000000..97dbeb6 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/aggr2.C @@ -0,0 +1,46 @@ +// PR c++/15172 +// { dg-do run } + +extern "C" int printf (const char *, ...); +extern "C" void abort (); + +struct A { + static A* p; + + A() { p = this; } + A(const A&); + ~A() { if (this != p) abort (); } + void print () { } +}; + +A* A::p; + +struct B { + A a; +}; + +B b = { A () }; + +struct A2 { + static A2* p; + + A2() { p = this; } + A2(const A2&); + ~A2() { if (this != p) abort (); } + void print () { } +}; + +A2* A2::p; + +struct B2 { + A2 a2; +}; + +int main () { + b.a.print (); + { + B2 b2 = { A2() }; + b2.a2.print (); + } +} + |