FreeBSD/contrib/gcc/cp/tree.c
/* EXP is an expression that we want to pre-evaluate.  Returns (in
   *INITP) an expression that will perform the pre-evaluation.  The
   value returned by this function is a side-effect free expression
   equivalent to the pre-evaluated expression.  Callers must ensure
   that *INITP is evaluated before EXP.  */
EXP is an expression that we want to pre-evaluate.  Returns (in
INITP) an expression that will perform the pre-evaluation.  The
value returned by this function is a side-effect free expression
equivalent to the pre-evaluated expression.  Callers must ensure
that *INITP is evaluated before EXP.
EXP is an expression that we want to pre - evaluate . Returns ( in INITP ) an expression that will perform the pre - evaluation . The value returned by this function is a side - effect free expression equivalent to the pre - evaluated expression . Callers must ensure that * INITP is evaluated before EXP .
tree
stabilize_expr (tree exp, tree* initp)
{
  tree init_expr;
  if (!TREE_SIDE_EFFECTS (exp))
    init_expr = NULL_TREE;
  else if (!real_lvalue_p (exp)
	   || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
    {
      init_expr = get_target_expr (exp);
      exp = TARGET_EXPR_SLOT (init_expr);
    }
  else
    {
      exp = build_unary_op (ADDR_EXPR, exp, 1);
      init_expr = get_target_expr (exp);
      exp = TARGET_EXPR_SLOT (init_expr);
      exp = build_indirect_ref (exp, 0);
    }
  *initp = init_expr;
  gcc_assert (!TREE_SIDE_EFFECTS (exp));
  return exp;
}
tree stabilize_expr ( tree exp , tree * initp ) { tree init_expr ; if ( ! TREE_SIDE_EFFECTS ( exp ) ) init_expr = NULL_TREE ; else if ( ! real_lvalue_p ( exp ) || ! TYPE_NEEDS_CONSTRUCTING ( TREE_TYPE ( exp ) ) ) { init_expr = get_target_expr ( exp ) ; exp = TARGET_EXPR_SLOT ( init_expr ) ; } else { exp = build_unary_op ( ADDR_EXPR , exp , 1 ) ; init_expr = get_target_expr ( exp ) ; exp = TARGET_EXPR_SLOT ( init_expr ) ; exp = build_indirect_ref ( exp , 0 ) ; } * initp = init_expr ; gcc_assert ( ! TREE_SIDE_EFFECTS ( exp ) ) ; return exp ; }
EXP is an expression that we want to pre-evaluate.
EXP is an expression that we want to pre - evaluate .