Hi, On Wed, 20 Apr 2011, Richard Guenther wrote:
> > I had occasion to try this today; this inheritance structure doesn't > > work. The truncated inheritance tree looks like: > > > > * decl_common > > * field_decl > > * const_decl > > * decl_with_rtl > > * label_decl > > * result_decl > > * parm_decl > > * decl_with_vis... > > > > In particular, FIELD_DECLs have a size, but they have no RTL associated > > with them. And LABEL_DECLs have RTL, but no size. Blaeh. So far about nice clean ideas :) One hacky idea: change my proposal to this: decl_common {} # no size, no rtl, no align, no pt_uid decl_with_rtl_or_size : decl_common { # add align, pt_uid union { rtx rtl; tree size; } u; } decl_with_size : decl_with_rtl_or_size { # add size, size_unit } Use the rtl_or_size struct primarily for the current _with_rtl things that don't naturally have a size, but use it also for FIELD_DECLs via the union. Alternatively I could also envision making a new tree_ struct for just field_decls, that would contain the size and other fields that currently are in decl_common just for fields (in particular the off_align) member. The various accessors like DECL_SIZE would then need to dispatch based on tree code. Also doesn't sound terribly sexy. FWIW I'm usually against on the side mappings A->B if most As will most of the time be associated with a B. A size _is_ associated with the entity always (for entities where it makes sense to talk about sizes), so that's exactly where I would find on the side tables strange. For DECL_RTL it's less clear. Ciao, Michael.