FreeBSD/contrib/gcc/cp/typeck.c
/* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
Build and return a conditional expression IFEXP .
Build and return a conditional expression IFEXP .
tree
build_x_conditional_expr (tree ifexp, tree op1, tree op2)
{
  tree orig_ifexp = ifexp;
  tree orig_op1 = op1;
  tree orig_op2 = op2;
  tree expr;
  if (processing_template_decl)
    {
      if (type_dependent_expression_p (ifexp)
	  || (op1 && type_dependent_expression_p (op1))
	  || type_dependent_expression_p (op2))
	return build_min_nt (COND_EXPR, ifexp, op1, op2);
      ifexp = build_non_dependent_expr (ifexp);
      if (op1)
	op1 = build_non_dependent_expr (op1);
      op2 = build_non_dependent_expr (op2);
    }
  expr = build_conditional_expr (ifexp, op1, op2);
  if (processing_template_decl && expr != error_mark_node)
    return build_min_non_dep (COND_EXPR, expr,
			      orig_ifexp, orig_op1, orig_op2);
  return expr;
}
tree build_x_conditional_expr ( tree ifexp , tree op1 , tree op2 ) { tree orig_ifexp = ifexp ; tree orig_op1 = op1 ; tree orig_op2 = op2 ; tree expr ; if ( processing_template_decl ) { if ( type_dependent_expression_p ( ifexp ) || ( op1 && type_dependent_expression_p ( op1 ) ) || type_dependent_expression_p ( op2 ) ) return build_min_nt ( COND_EXPR , ifexp , op1 , op2 ) ; ifexp = build_non_dependent_expr ( ifexp ) ; if ( op1 ) op1 = build_non_dependent_expr ( op1 ) ; op2 = build_non_dependent_expr ( op2 ) ; } expr = build_conditional_expr ( ifexp , op1 , op2 ) ; if ( processing_template_decl && expr != error_mark_node ) return build_min_non_dep ( COND_EXPR , expr , orig_ifexp , orig_op1 , orig_op2 ) ; return expr ; }
Build and return a conditional expression IFEXP ?
Build and return a conditional expression IFEXP ?
/* The standard says that the expression is type-dependent if
	 IFEXP is type-dependent, even though the eventual type of the
	 expression doesn't dependent on IFEXP.  */ /* As a GNU extension, the middle operand may be omitted.  */