This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: zero sized initializers with side effects discarded




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?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]