From: jakub Date: Thu, 9 Oct 2008 20:15:17 +0000 (+0000) Subject: PR c++/37568 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d7daeaeb94f8d7c416dc6f9fe7950ee112f44017;p=thirdparty%2Fgcc.git PR c++/37568 * semantics.c (finalize_nrv_r): Clear DECL_INITIAL instead of setting it to error_mark_node. * testsuite/libmudflap.c++/pass66-frag.cxx: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141010 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bb4b6b21bedc..6ad8a8a6ad5b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-10-09 Jakub Jelinek + + PR c++/37568 + * semantics.c (finalize_nrv_r): Clear DECL_INITIAL instead of + setting it to error_mark_node. + 2008-10-07 Steve Ellcey * decl.c (start_cleanup_fn): Declare as inline. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index b1bbb38dfa8e..040a9b10c35e 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -3310,13 +3310,11 @@ finalize_nrv_r (tree* tp, int* walk_subtrees, void* data) tree init; if (DECL_INITIAL (dp->var) && DECL_INITIAL (dp->var) != error_mark_node) - { - init = build2 (INIT_EXPR, void_type_node, dp->result, - DECL_INITIAL (dp->var)); - DECL_INITIAL (dp->var) = error_mark_node; - } + init = build2 (INIT_EXPR, void_type_node, dp->result, + DECL_INITIAL (dp->var)); else init = build_empty_stmt (); + DECL_INITIAL (dp->var) = NULL_TREE; SET_EXPR_LOCUS (init, EXPR_LOCUS (*tp)); *tp = init; } diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index b09f9440d5fb..9214759b304c 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,8 @@ +2008-10-09 Jakub Jelinek + + PR c++/37568 + * testsuite/libmudflap.c++/pass66-frag.cxx: New test. + 2008-09-26 Peter O'Gorman Steve Ellcey diff --git a/libmudflap/testsuite/libmudflap.c++/pass66-frag.cxx b/libmudflap/testsuite/libmudflap.c++/pass66-frag.cxx new file mode 100644 index 000000000000..989c7ca6f1c0 --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c++/pass66-frag.cxx @@ -0,0 +1,17 @@ +// PR c++/37568 +// { dg-do compile } +// { dg-options "-fmudflap -O" } + +struct A +{ + int i; +}; + +A +foo () +{ + A a = { 1 }; + return a; +} + +A a = foo ();