FreeBSD/contrib/gcc/varasm.c
/* Find all the constants whose addresses are referenced inside of EXP,
   and make sure assembler code with a label has been output for each one.
   Indicate whether an ADDR_EXPR has been encountered.  */
Find all the constants whose addresses are referenced inside of EXP,
and make sure assembler code with a label has been output for each one.
Indicate whether an ADDR_EXPR has been encountered.
Find all the constants whose addresses are referenced inside of EXP and make sure assembler code with a label has been output for each one . Indicate whether an ADDR_EXPR has been encountered .
static void
output_addressed_constants (tree exp)
{
  tree tem;
  exp = lang_hooks.expand_constant (exp);
  switch (TREE_CODE (exp))
    {
    case ADDR_EXPR:
    case FDESC_EXPR:
      for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
	   tem = TREE_OPERAND (tem, 0))
	;
      if (TREE_CODE (tem) == CONST_DECL && DECL_INITIAL (tem))
	tem = DECL_INITIAL (tem);
      if (CONSTANT_CLASS_P (tem) || TREE_CODE (tem) == CONSTRUCTOR)
	output_constant_def (tem, 0);
      break;
    case PLUS_EXPR:
    case MINUS_EXPR:
      output_addressed_constants (TREE_OPERAND (exp, 1));
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
    case VIEW_CONVERT_EXPR:
      output_addressed_constants (TREE_OPERAND (exp, 0));
      break;
    case CONSTRUCTOR:
      {
	unsigned HOST_WIDE_INT idx;
	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
	  if (tem != 0)
	    output_addressed_constants (tem);
      }
      break;
    default:
      break;
    }
}
static void output_addressed_constants ( tree exp ) { tree tem ; exp = lang_hooks . expand_constant ( exp ) ; switch ( TREE_CODE ( exp ) ) { case ADDR_EXPR : case FDESC_EXPR : for ( tem = TREE_OPERAND ( exp , 0 ) ; handled_component_p ( tem ) ; tem = TREE_OPERAND ( tem , 0 ) ) ; if ( TREE_CODE ( tem ) == CONST_DECL && DECL_INITIAL ( tem ) ) tem = DECL_INITIAL ( tem ) ; if ( CONSTANT_CLASS_P ( tem ) || TREE_CODE ( tem ) == CONSTRUCTOR ) output_constant_def ( tem , 0 ) ; break ; case PLUS_EXPR : case MINUS_EXPR : output_addressed_constants ( TREE_OPERAND ( exp , 1 ) ) ; case NOP_EXPR : case CONVERT_EXPR : case NON_LVALUE_EXPR : case VIEW_CONVERT_EXPR : output_addressed_constants ( TREE_OPERAND ( exp , 0 ) ) ; break ; case CONSTRUCTOR : { unsigned HOST_WIDE_INT idx ; FOR_EACH_CONSTRUCTOR_VALUE ( CONSTRUCTOR_ELTS ( exp ) , idx , tem ) if ( tem != 0 ) output_addressed_constants ( tem ) ; } break ; default : break ; } }
Find all the constants whose addresses are referenced inside of EXP,
and make sure assembler code with a label has been output for each one.
Find all the constants whose addresses are referenced inside of EXP and make sure assembler code with a label has been output for each one .
/* Give the front-end a chance to convert VALUE to something that
     looks more like a constant to the back-end.  */ /* Go inside any operations that get_inner_reference can handle and see
	 if what's inside is a constant: no need to do anything here for
	 addresses of variables or functions.  */ /* If we have an initialized CONST_DECL, retrieve the initializer.  */ /* Fall through.  */