FreeBSD/contrib/gcc/cp/class.c
/* Set memoizing fields and bits of T (and its variants) for later
   use.  */
Set memoizing fields and bits of T (and its variants) for later
use.
Set memoizing fields and bits of T ( and its variants ) for later use .
static void
finish_struct_bits (tree t)
{
  tree variants;
  for (variants = TYPE_NEXT_VARIANT (t);
       variants;
       variants = TYPE_NEXT_VARIANT (variants))
    {
      TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
      TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
      TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
      CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY (variants) =
	CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY (t);
      CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE (variants) =
	CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE (t);
      TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
      TYPE_BINFO (variants) = TYPE_BINFO (t);
      TYPE_VFIELD (variants) = TYPE_VFIELD (t);
      TYPE_METHODS (variants) = TYPE_METHODS (t);
      TYPE_FIELDS (variants) = TYPE_FIELDS (t);
    }
  if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
    get_pure_virtuals (t);
  if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
    {
      tree variants;
      DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
      for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
	{
	  TYPE_MODE (variants) = BLKmode;
	  TREE_ADDRESSABLE (variants) = 1;
	}
    }
}
static void finish_struct_bits ( tree t ) { tree variants ; for ( variants = TYPE_NEXT_VARIANT ( t ) ; variants ; variants = TYPE_NEXT_VARIANT ( variants ) ) { TYPE_HAS_CONSTRUCTOR ( variants ) = TYPE_HAS_CONSTRUCTOR ( t ) ; TYPE_NEEDS_CONSTRUCTING ( variants ) = TYPE_NEEDS_CONSTRUCTING ( t ) ; TYPE_HAS_NONTRIVIAL_DESTRUCTOR ( variants ) = TYPE_HAS_NONTRIVIAL_DESTRUCTOR ( t ) ; CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY ( variants ) = CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY ( t ) ; CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE ( variants ) = CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE ( t ) ; TYPE_POLYMORPHIC_P ( variants ) = TYPE_POLYMORPHIC_P ( t ) ; TYPE_BINFO ( variants ) = TYPE_BINFO ( t ) ; TYPE_VFIELD ( variants ) = TYPE_VFIELD ( t ) ; TYPE_METHODS ( variants ) = TYPE_METHODS ( t ) ; TYPE_FIELDS ( variants ) = TYPE_FIELDS ( t ) ; } if ( BINFO_N_BASE_BINFOS ( TYPE_BINFO ( t ) ) && TYPE_POLYMORPHIC_P ( t ) ) get_pure_virtuals ( t ) ; if ( ! TYPE_HAS_TRIVIAL_INIT_REF ( t ) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR ( t ) ) { tree variants ; DECL_MODE ( TYPE_MAIN_DECL ( t ) ) = BLKmode ; for ( variants = t ; variants ; variants = TYPE_NEXT_VARIANT ( variants ) ) { TYPE_MODE ( variants ) = BLKmode ; TREE_ADDRESSABLE ( variants ) = 1 ; } } }
Set memoizing fields and bits of T (and its variants) for later
use.
Set memoizing fields and bits of T ( and its variants ) for later use .
/* Fix up variants (if any).  */ /* These fields are in the _TYPE part of the node, not in
	 the TYPE_LANG_SPECIFIC component, so they are not shared.  */ /* APPLE LOCAL begin omit calls to empty destructors 5559195 */ /* APPLE LOCAL end omit calls to empty destructors 5559195 */ /* Copy whatever these are holding today.  */ /* For a class w/o baseclasses, 'finish_struct' has set
       CLASSTYPE_PURE_VIRTUALS correctly (by definition).
       Similarly for a class whose base classes do not have vtables.
       When neither of these is true, we might have removed abstract
       virtuals (by providing a definition), added some (by declaring
       new ones), or redeclared ones from a base class.  We need to
       recalculate what's really an abstract virtual at this point (by
       looking in the vtables).  */ /* If this type has a copy constructor or a destructor, force its
     mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
     nonzero.  This will cause it to be passed by invisible reference
     and prevent it from being returned in a register.  */