From 938650d8fddb878f623e315f0b7fd94b217efa96 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 5 Jul 2010 21:42:53 +0200 Subject: [PATCH] tree-nrv.c (tree_nrv): Set DECL_VALUE_EXPR on found to result. * tree-nrv.c (tree_nrv): Set DECL_VALUE_EXPR on found to result. * gcc.dg/guality/nrv-1.c: New test. From-SVN: r161849 --- gcc/ChangeLog | 5 ++++- gcc/testsuite/ChangeLog | 5 ++++- gcc/testsuite/gcc.dg/guality/nrv-1.c | 29 ++++++++++++++++++++++++++++ gcc/tree-nrv.c | 3 +++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/guality/nrv-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8cf4196dc30..4692a1a561f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2010-07-05 Jakub Jelinek + + * tree-nrv.c (tree_nrv): Set DECL_VALUE_EXPR on found to result. + 2010-07-05 Anatoly Sokolov * double-int.h (fit_double_type): Remove declaration. @@ -34,7 +38,6 @@ 2010-07-05 Sandra Loosemore PR middle-end/42505 - * tree-ssa-loop-ivopts.c (determine_set_costs): Delete obsolete comments about cost model. (try_add_cand_for): Add second strategy for choosing initial set diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae6ec62cb15..2f7e2db9ddc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,7 +1,10 @@ +2010-07-05 Jakub Jelinek + + * gcc.dg/guality/nrv-1.c: New test. + 2010-07-05 Sandra Loosemore PR middle-end/42505 - * gcc.target/arm/pr42505.c: New test case. 2010-07-05 Jakub Jelinek diff --git a/gcc/testsuite/gcc.dg/guality/nrv-1.c b/gcc/testsuite/gcc.dg/guality/nrv-1.c new file mode 100644 index 00000000000..6e70050ec4d --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/nrv-1.c @@ -0,0 +1,29 @@ +/* { dg-do run } */ +/* { dg-options "-g -fno-tree-sra" } */ + +void abort (void); + +struct A +{ + int i[100]; +}; + +struct A a1, a3; + +__attribute__((noinline)) struct A +f () +{ + struct A a2; + a2.i[0] = 42; + if (a3.i[0] != 0) + abort (); + a2.i[4] = 7; /* { dg-final { gdb-test 20 "a2.i\[0\]" "42" } } */ + return a2; +} + +int +main () +{ + a1 = f (); + return 0; +} diff --git a/gcc/tree-nrv.c b/gcc/tree-nrv.c index 31de9ba7753..2f40d563d33 100644 --- a/gcc/tree-nrv.c +++ b/gcc/tree-nrv.c @@ -259,6 +259,9 @@ tree_nrv (void) } } + SET_DECL_VALUE_EXPR (found, result); + DECL_HAS_VALUE_EXPR_P (found) = 1; + /* FOUND is no longer used. Ensure it gets removed. */ var_ann (found)->used = 0; return 0; -- 2.30.2