contrib/gcc-4.4/gcc/cp/call.c
/* ARG is being passed to a varargs function.  Perform any conversions
   required.  Return the converted value.  */
ARG is being passed to a varargs function.  Perform any conversions
required.  Return the converted value.
ARG is being passed to a varargs function . Perform any conversions required . Return the converted value .
tree
convert_arg_to_ellipsis (tree arg)
{
  arg = decay_conversion (arg);
  if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
      && (TYPE_PRECISION (TREE_TYPE (arg))
	  < TYPE_PRECISION (double_type_node)))
    arg = convert_to_real (double_type_node, arg);
  else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
    arg = perform_integral_promotions (arg);
  arg = require_complete_type (arg);
  if (arg != error_mark_node
      && !pod_type_p (TREE_TYPE (arg)))
    {
      if (!skip_evaluation)
	warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
		 "call will abort at runtime", TREE_TYPE (arg));
      arg = call_builtin_trap ();
      arg = build2 (COMPOUND_EXPR, integer_type_node, arg,
		    integer_zero_node);
    }
  return arg;
}
tree convert_arg_to_ellipsis ( tree arg ) { arg = decay_conversion ( arg ) ; if ( TREE_CODE ( TREE_TYPE ( arg ) ) == REAL_TYPE && ( TYPE_PRECISION ( TREE_TYPE ( arg ) ) < TYPE_PRECISION ( double_type_node ) ) ) arg = convert_to_real ( double_type_node , arg ) ; else if ( INTEGRAL_OR_ENUMERATION_TYPE_P ( TREE_TYPE ( arg ) ) ) arg = perform_integral_promotions ( arg ) ; arg = require_complete_type ( arg ) ; if ( arg != error_mark_node && ! pod_type_p ( TREE_TYPE ( arg ) ) ) { if ( ! skip_evaluation ) warning ( 0 , " " " " , TREE_TYPE ( arg ) ) ; arg = call_builtin_trap ( ) ; arg = build2 ( COMPOUND_EXPR , integer_type_node , arg , integer_zero_node ) ; } return arg ; }
ARG is being passed to a varargs function.
ARG is being passed to a varargs function .
/* [expr.call]

     The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
     standard conversions are performed.  */ /* [expr.call]

     If the argument has integral or enumeration type that is subject
     to the integral promotions (_conv.prom_), or a floating point
     type that is subject to the floating point promotion
     (_conv.fpprom_), the value of the argument is converted to the
     promoted type before the call.  */ /* Undefined behavior [expr.call] 5.2.2/7.  We used to just warn
	 here and do a bitwise copy, but now cp_expr_size will abort if we
	 try to do that.
	 If the call appears in the context of a sizeof expression,
	 there is no need to emit a warning, since the expression won't be
	 evaluated. We keep the builtin_trap just as a safety check.  */