Jason Merrill wrote on 03/30/07 11:45: > Looks fine to me. Many places in the front end use build_address rather > than build1 (ADDR_EXPR) to avoid this issue.
Yeah, I found other cases in Java and in c-*.c. In one case, we are building the address of a LABEL_DECL for a computed goto (finish_label_address_expr). Interestingly enough, mark_addressable refuses to mark the label as addressable, but we need the label addressable so that it's processed properly by the compute_may_aliases machinery. Given that we need to be very consistent about addressability marking in the FEs, wouldn't we be better off doing this in build1_stat()? Index: tree.c =================================================================== --- tree.c (revision 123332) +++ tree.c (working copy) @@ -2922,7 +2922,11 @@ build1_stat (enum tree_code code, tree t case ADDR_EXPR: if (node) - recompute_tree_invariant_for_addr_expr (t); + { + recompute_tree_invariant_for_addr_expr (t); + if (DECL_P (node)) + TREE_ADDRESSABLE (node) = 1; + } break; default: Thanks.