aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorFabien ChĂȘne <fabien.chene@gmail.com>2010-05-07 15:52:06 +0000
committerJason Merrill <jason@gcc.gnu.org>2010-05-07 11:52:06 -0400
commit40bb78ad246919ee068382c3a2cdf6f299e412c9 (patch)
tree509ac9f873d8887b78813e37442448aa6d8215b2 /gcc/testsuite
parent48cf395bdb30be10a283c3ac4d6217c322f39070 (diff)
downloadgcc-40bb78ad246919ee068382c3a2cdf6f299e412c9.zip
gcc-40bb78ad246919ee068382c3a2cdf6f299e412c9.tar.gz
gcc-40bb78ad246919ee068382c3a2cdf6f299e412c9.tar.bz2
re PR c++/43951 (Revision 158918 miscompiled 483.xalancbmk in SPEC CPU 2006)
PR c++/43951 * init.c (diagnose_uninitialized_cst_or_ref_member_1): Returns the error count. Emit errors only if compain is true. (build_new_1): Do not return error_mark_node if diagnose_uninitialized_cst_or_ref_member_1 does not diagnose any errors. Delay the check for user-provided constructor. (perform_member_init): Adjust. * cp-tree.h (diagnose_uninitialized_cst_or_ref_member): Change the prototype. From-SVN: r159158
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/init/new29.C33
2 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 297ae76..08da4e6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-05-07 Fabien ChĂȘne <fabien.chene@gmail.com>
+
+ PR c++/43951
+ * g++.dg/init/new29.C: New.
+
2010-05-07 Daniel Franke <franke.daniel@gmail.com>
PR fortran/40728
diff --git a/gcc/testsuite/g++.dg/init/new29.C b/gcc/testsuite/g++.dg/init/new29.C
new file mode 100644
index 0000000..1ca8ca0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new29.C
@@ -0,0 +1,33 @@
+// PR c++/43951
+// { dg-do run }
+// { dg-options "-O2" }
+
+extern "C" void abort ();
+
+class Foo
+{
+public:
+ Foo () : xxx (1) {};
+ const int xxx;
+};
+
+struct Foo2
+{
+ Foo foo;
+};
+
+Foo2 *
+bar ()
+{
+ return new Foo2;
+}
+
+int
+main ()
+{
+ Foo2 *p = bar ();
+
+ if (p->foo.xxx != 1)
+ abort ();
+ return 0;
+}