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. I have been experimenting with a simple patch adding side effects checks to the conditions, like "! TREE_SIDE_EFFECTS (value)" in init_ctor_eval and "! TREE_SIDE_EFFECTS (*from_p)" in modify_expr. The first programs in which I've observed problems were in Ada, and the patch helped them. Manual testing for C was not as successful (expected calls still missing), due to differences in the way TREE_SIDE_EFFECTS is set on various trees. Automated testing (make check) even triggered an ICE on zero-strct-4.c. Are the TREE_SIDE_EFFECTS checks mentioned above sensible ? I'd be happy to investigate further, provide testcases, work on extra patches, etc, and would welcome feedback first to ensure I'm searching in the right direction :) Thanks in advance for your advices, With Kind Regards, Olivier