On Fri, 9 Sep 2005, Olivier Hainque wrote:

Hello,

In a number of places, the gimplifier simply discards what involves
zero sized entities. For instance:

 in "gimplify_init_ctor_eval"...

     FOR_EACH_CONSTRUCTOR_ELT (elts, ix, purpose, value)
     ...
     if (zero_sized_field_decl (purpose))
       continue;

  or in "gimplify_modify_expr"...

     /* For zero sized types only gimplify the left hand side and
        right hand side as statements and throw away the assignment.  */
     if (zero_sized_type (TREE_TYPE (*from_p)))
         ...

This is causing troubles when side effects are so discarded, for instance
a call to a function returning a zero sized type.

Even if you "fixed" init_ctor_eval (modify_expr gimplifies the lhs and rhs and throws away the assignment), you're going to run into problems in the subvar machinery if you really have 0 sized field accesses with side effects.

I'm not sure what the heck a "0 sized field access with side effects" does.

After all, a 0 sized field has no space, etc (in fact, it is nothing), so how could you side-effect by accessing one, since any such access must do nothing?

Reply via email to