[PATCH] PR c++/PR48035
Jason Merrill
jason@redhat.com
Fri Mar 11 14:57:00 GMT 2011
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
More information about the Gcc-patches
mailing list