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.

Reply via email to