diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2003-08-01 09:16:09 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2003-08-01 09:16:09 +0000 |
commit | d340e53fc39cdfc88b89ec4a420719dc31aadca8 (patch) | |
tree | 456f8e4d840ad08e52a2de88fef46b631c51a1dc /gcc/cp | |
parent | f21e6028bf127c16c109bbfe9135334077522ee5 (diff) | |
download | gcc-d340e53fc39cdfc88b89ec4a420719dc31aadca8.zip gcc-d340e53fc39cdfc88b89ec4a420719dc31aadca8.tar.gz gcc-d340e53fc39cdfc88b89ec4a420719dc31aadca8.tar.bz2 |
typeck.c (build_compound_expr): If RHS is a TARGET_EXPR, put the compound expr inside the target's initializer.
cp:
* typeck.c (build_compound_expr): If RHS is a TARGET_EXPR, put the
compound expr inside the target's initializer.
testsuite:
* g++.dg/opt/tmp1.C: New test.
From-SVN: r70042
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 13 |
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1bc4fed..d999173 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2003-08-01 Nathan Sidwell <nathan@codesourcery.com> + * typeck.c (build_compound_expr): If RHS is a TARGET_EXPR, put the + compound expr inside the target's initializer. + PR c++/11525 * parser.c (cp_parser_primary_expression): Do not set non-constant-p merely because it is a dependent scope. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 00fa013..dd7e0af 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4322,6 +4322,19 @@ build_compound_expr (tree lhs, tree rhs) lhs = convert_to_void (lhs, "left-hand operand of comma"); if (lhs == error_mark_node || rhs == error_mark_node) return error_mark_node; + + if (TREE_CODE (rhs) == TARGET_EXPR) + { + /* If the rhs is a TARGET_EXPR, then build the compound + expression inside the target_expr's initializer. This + helps the compiler to eliminate unncessary temporaries. */ + tree init = TREE_OPERAND (rhs, 1); + + init = build (COMPOUND_EXPR, TREE_TYPE (init), lhs, init); + TREE_OPERAND (rhs, 1) = init; + + return rhs; + } return build (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs); } |