On 03/11/2011 03:01 AM, Jakub Jelinek wrote:
Do we need to redo parts of class.c anyway?  From what I understand, the
problematic vtbl pointers are at the end of the base types and DECL_SIZE
is set to the CLASSTYPE_AS_BASE type size, thus those pointers ought to
be at or beyond the containing field's size.
So, can't we simply skip subfields whose bit_position is equal or larger
to containing field's size?  Something like (works on the testcase from this
PR, otherwise untested):

Sure, that should work. I had been thinking of stopping when we run out of fields in CLASSTYPE_AS_BASE, but your approach seems simpler.

Or, in the simplify_aggr_init case where the created tree is handed
immediately to the gimplifier, there is IMHO no point in initializing
all fields to zero when the gimplifier throws that immediately away again.

Unfortunately, pointers to data members make this not good enough: zero-initializing one means setting the bits to -1. Though I suppose we could keep track of whether or not a class has a pointer to data member field somewhere (and therefore need to do this the hard way) and if not, just use an empty CONSTRUCTOR.

Jason

Reply via email to