On 03/05/2015 06:25 PM, Aldy Hernandez wrote:
+ tree ret = TREE_OPERAND (*expr_p, 0); + if (ret && (TREE_CODE (ret) == INIT_EXPR + || TREE_CODE (ret) == MODIFY_EXPR) + && TREE_CODE (TREE_OPERAND (ret, 0)) == RESULT_DECL + && is_gimple_lvalue (TREE_OPERAND (ret, 0)) + && is_really_empty_class (TREE_TYPE (TREE_OPERAND (ret, 0)))) + { + tree result_decl = TREE_OPERAND (ret, 0); + tree list = alloc_stmt_list (); + append_to_statement_list (TREE_OPERAND (ret, 1), &list); + append_to_statement_list (build1 (RETURN_EXPR, void_type_node, + result_decl), &list); + *expr_p = list; + return GS_OK; + }
This should really use the MODIFY_EXPR case rather than duplicate it here. Actually, why don't we already hit that case when processing the RETURN_EXPR?
Jason