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?