This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: zero sized initializers with side effects discarded
Andrew Pinski wrote:
> > I have been experimenting with a simple patch adding side effects
> > checks to the conditions, like "! TREE_SIDE_EFFECTS (value)"
> > in init_ctor_eval
>
> Yes the one in needs to gimplify only the expression as a statement
> and not add a modify statement. More on the testcase later.
> You should not need the check in modify_expr as the side effects are
> never mishandled as we always will add the lhs and rhs to the
> instruction stream:
Oh, I see - misread what it did. Thanks.
I was confused by the fact that the check in init_ctor_eval did not
help for C while it did for Ada.
It actually doesn't change the behavior for C (at least on my testcases)
because we don't get into init_ctor_eval at all, but in gimplify_expr
<case CONSTRUCTOR_EXPR> instead, which precisely processes values with
TREE_SIDE_EFFECTS set.
I'm not yet clear why the call is not issued there. This is my first
dive in the gimplifier, so it might well be simple.
> Here is a testcase which should pass:
...
It doesn't pass with the init_ctor_eval check either.
> If you want me to file a bug, I can, I can also look into the issue
> some too and figure out where the f++ is going to.
Either is fine with me (thanks for the offer :).
On my side, I will test again with only the init_ctor_eval change and
submit on gcc-patches with an Ada testcase.
The only regressions I had with the two changes were the ICEs on
zero-strct-4.c. I don't see them with the modify_expr change removed,
so hopefully the second round will go well.
> Note if we change struct g to be a non zero sized struct, it works.
Indeed.
Thanks for your feedback.
Olivier