diff options
Diffstat (limited to 'gcc/cp/typeck.c')
| -rw-r--r-- | gcc/cp/typeck.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 00fa013b69a..dd7e0af8084 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); } |

