From 77eb5950766876da857481b3dafc7ccd13b4b722 Mon Sep 17 00:00:00 2001 From: Seongbae Park Date: Tue, 20 Mar 2007 15:42:37 +0000 Subject: [PATCH] re PR tree-optimization/30590 (tree-nrv optimization clobbers return variable) 2007-03-19 Seongbae Park PR tree-optimization/30590 * g++.dg/opt/pr30590.C: New testcase. From-SVN: r123087 --- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/g++.dg/opt/pr30590.C | 40 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/pr30590.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0e772e49a86..147dd302106 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-03-19 Seongbae Park + + PR tree-optimization/30590 + * g++.dg/opt/pr30590.C: New testcase. + 2007-03-20 Jakub Jelinek PR c/30762 diff --git a/gcc/testsuite/g++.dg/opt/pr30590.C b/gcc/testsuite/g++.dg/opt/pr30590.C new file mode 100644 index 00000000000..42ae046db81 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr30590.C @@ -0,0 +1,40 @@ +/* { dg-do run } */ +/* { dg-options "-O" } */ +struct test +{ + int type; + char buffer[4242]; /* should trigger pass-by-reference */ +}; + +int flag = 0; + +struct test +reset (void) +{ + struct test retval; + retval.type = 1; + return retval; +} + +struct test +test (void) +{ + struct test result; + result.type = 0; + + for (int i = 0; i < 2; ++i) + { + struct test candidate = reset (); + if (flag) + result = candidate; + } + + return result; +} + +int +main (void) +{ + struct test result = test (); + return result.type; +} -- 2.30.2