On 05/03/2011 11:52 AM, Eric Botcazou wrote:
In that case you wouldn't be affected by this patch; unshare_body uses
mostly_copy_tree_r, which has its own special case for STATEMENT_LIST.
Right, I added it precisely to support statement expressions in Ada (instead
of changing copy_tree_r) since we never want to copy them in the unsharing
phase. That's why I find the change to copy_tree_r questionable.
Well, let's look at the users of copy_tree_r.
cp/tree.c (bot_manip): The case I want to fix.
gimplify.c (mostly_copy_tree_r): Handles STATEMENT_LIST itself.
stor-layout.c (copy_self_referential_tree_r): Affected by the change.
Would you like me to add a gcc_unreachable() here?
tree-inline.c (copy_tree_body_r): already copies STATEMENT_LIST itself
(with a copy_statement_list function which I should use instead of
open-coding it again).
(copy_bind_expr): subroutine of copy_tree_body_r.
(unsave_r, remap_gimple_op_r): Handle STATEMENT_LIST themselves.
So, looks like one place that could have an undesired change in
behavior. I'll go ahead and add that assert.
Jason