FreeBSD/contrib/gcc/cp/class.c
/* Add OFFSET to all base types of BINFO which is a base in the
   hierarchy dominated by T.

   OFFSET, which is a type offset, is number of bytes.  */
Add OFFSET to all base types of BINFO which is a base in the
hierarchy dominated by T.

OFFSET, which is a type offset, is number of bytes.
Add OFFSET to all base types of BINFO which is a base in the hierarchy dominated by T . OFFSET which is a type offset is number of bytes .
static void
propagate_binfo_offsets (tree binfo, tree offset)
{
  int i;
  tree primary_binfo;
  tree base_binfo;
  BINFO_OFFSET (binfo)
    = convert (sizetype,
	       size_binop (PLUS_EXPR,
			   convert (ssizetype, BINFO_OFFSET (binfo)),
			   offset));
  primary_binfo = get_primary_binfo (binfo);
  if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
    propagate_binfo_offsets (primary_binfo, offset);
  for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
    {
      if (base_binfo == primary_binfo)
	continue;
      if (BINFO_VIRTUAL_P (base_binfo))
	continue;
      propagate_binfo_offsets (base_binfo, offset);
    }
}
static void propagate_binfo_offsets ( tree binfo , tree offset ) { int i ; tree primary_binfo ; tree base_binfo ; BINFO_OFFSET ( binfo ) = convert ( sizetype , size_binop ( PLUS_EXPR , convert ( ssizetype , BINFO_OFFSET ( binfo ) ) , offset ) ) ; primary_binfo = get_primary_binfo ( binfo ) ; if ( primary_binfo && BINFO_INHERITANCE_CHAIN ( primary_binfo ) == binfo ) propagate_binfo_offsets ( primary_binfo , offset ) ; for ( i = 0 ; BINFO_BASE_ITERATE ( binfo , i , base_binfo ) ; ++ i ) { if ( base_binfo == primary_binfo ) continue ; if ( BINFO_VIRTUAL_P ( base_binfo ) ) continue ; propagate_binfo_offsets ( base_binfo , offset ) ; } }
Add OFFSET to all base types of BINFO which is a base in the
hierarchy dominated by T.
Add OFFSET to all base types of BINFO which is a base in the hierarchy dominated by T .
/* Update BINFO's offset.  */ /* Find the primary base class.  */ /* Scan all of the bases, pushing the BINFO_OFFSET adjust
     downwards.  */ /* Don't do the primary base twice.  */