aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>2002-07-05 11:16:56 -0400
committerJason Merrill <jason@gcc.gnu.org>2002-07-05 11:16:56 -0400
commit7dc17098a2c31f04a702967845220d5b1e4a2336 (patch)
tree716cf7db649c843c0967c20a371c584e2c0ca472
parent98c07d7bd78d311fc95985791421bfde08f40a0b (diff)
downloadgcc-7dc17098a2c31f04a702967845220d5b1e4a2336.zip
gcc-7dc17098a2c31f04a702967845220d5b1e4a2336.tar.gz
gcc-7dc17098a2c31f04a702967845220d5b1e4a2336.tar.bz2
re PR rtl-optimization/7145 (g++ -O with structure initializer & return value optimization generates bad code)
PR optimization/7145 * tree.c (cp_copy_res_decl_for_inlining): Also copy DECL_INITIAL. [[Split portion of a mixed commit.]] From-SVN: r55262.2
-rw-r--r--gcc/testsuite/g++.dg/opt/nrv4.C23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/opt/nrv4.C b/gcc/testsuite/g++.dg/opt/nrv4.C
new file mode 100644
index 0000000..531647d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/nrv4.C
@@ -0,0 +1,23 @@
+// PR optimization/7145
+// Bug: The NRV optimization caused us to lose the initializer for 'ret'.
+// { dg-options -O }
+// { dg-do run }
+
+struct GdkColor {
+ long pixel;
+ short red;
+ short green;
+ short blue;
+};
+
+inline GdkColor mkcolor() {
+ GdkColor ret={0,1,2,3};
+ return ret;
+}
+
+int
+main()
+{
+ GdkColor col=mkcolor();
+ return (col.pixel != 0 || col.red != 1 || col.green != 2 || col.blue != 3);
+}