GCC Status Report (2004-03-09)

Mark Mitchell mark@codesourcery.com
Wed Mar 17 15:55:00 GMT 2004


Eric Botcazou wrote:

>>So, would you please apply Olivier's patch to the 3.4 branch and the
>>mainline?  Then, we need to come up with some better long-term solution.
>>    
>>
>
>There is a hitch: the C front-end is relying on the clearing optimization to 
>implement the semantics mandated by C99 §6.7.8 [19], that is for
>
>struct B {
>    struct A a;
>    void * const b;
>    struct A const * const c;
>    struct A const *d;
>};
>
>bar (void *x)
>{
>  struct B y = { .b = x, .c = (void *) 0 };
>}
>
>the front-end sends a constructor with only 2 elements to the middle-end, 
>while C99 wants b.a and b.d to be cleared too.
>  
>
Thank you for doing the experiment!

There are two other fixes I can think of:

(1) Try my scheduling barrier idea, where we introduce a volatile asm 
equivalent between the clearing and the normal assignment.  I know this 
is potentially pessimizing, but in practice the pessimization will 
probably be slight.

(2) In the unsafe case, implement the C99 rule by explicitly clearing 
each individual field.  In other words, iterate through the fields, 
clearing all of the fields that do not have an explicit CONSTRUCTOR_ELT.

I think (1) will probably be less pessimizing that (2).  Are you willing 
to give that a try?

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com



More information about the Gcc mailing list