-- >8 --
Subject: [PATCH] c++: Replace RETURN macros with iloc_sentinel
This replaces the C-era RETURN macro idiom used by some of the tsubsting
functions with an iloc_sentinel declared at the start of each function.
gcc/cp/ChangeLog:
* pt.c (tsubst_decl): Delete the RETURN macro, and replace its
uses with a plain 'return'. Set up an iloc_sentinel at the
start of the function to set and restore input_location.
(tsubst_expr): Likewise. Remove redundant break statements that
immediately follow a return.
(tsubst_copy_and_build): Likewise. Remove 'retval' local
variable. Add gcc_unreachable to the end of the function.
---
gcc/cp/pt.c | 316 ++++++++++++++++++++++++----------------------------
1 file changed, 145 insertions(+), 171 deletions(-)
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 5b2f43dc5c1..32d1759258c 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -14414,15 +14414,12 @@ enclosing_instantiation_of (tree otctx)
static tree
tsubst_decl (tree t, tree args, tsubst_flags_t complain)
{
-#define RETURN(EXP) do { r = (EXP); goto out; } while(0)
- location_t saved_loc;
tree r = NULL_TREE;
tree in_decl = t;
hashval_t hash = 0;
- /* Set the filename and linenumber to improve error-reporting. */
- saved_loc = input_location;
- input_location = DECL_SOURCE_LOCATION (t);
+ /* Set the source position to improve error-reporting. */
+ iloc_sentinel ils (DECL_SOURCE_LOCATION (t));
switch (TREE_CODE (t))
{
@@ -14453,7 +14450,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
if (spec
&& TREE_CODE (spec) == PARM_DECL
&& TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
- RETURN (spec);
+ return spec;
/* Expand the TYPE_PACK_EXPANSION that provides the types for
the parameters in this function parameter pack. */
@@ -14466,8 +14463,8 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
/* Zero-length parameter packs are boring. Just substitute
into the chain. */
if (len == 0 && !cp_unevaluated_operand)
- RETURN (tsubst (TREE_CHAIN (t), args, complain,
- TREE_CHAIN (t)));
+ return tsubst (TREE_CHAIN (t), args, complain,
+ TREE_CHAIN (t));
}
else
{
@@ -14587,7 +14584,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
type = tsubst (TREE_TYPE (t), args, complain, in_decl);
if (type == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
TREE_TYPE (r) = type;
cp_apply_type_quals_to_decl (cp_type_quals (type), r);
@@ -14687,7 +14684,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
tree type = NULL_TREE;
if (TREE_TYPE (t) == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
if (TREE_CODE (t) == TYPE_DECL
&& t == TYPE_MAIN_DECL (TREE_TYPE (t)))
@@ -14699,7 +14696,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
we've copied the type for a typedef. */
type = tsubst (TREE_TYPE (t), args, complain, in_decl);
if (type == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
r = TYPE_NAME (type);
break;
}
@@ -14745,7 +14742,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
argvec, t, complain,
/*all*/true, /*defarg*/true));
if (argvec == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
hash = hash_tmpl_and_args (gen_tmpl, argvec);
spec = retrieve_specialization (gen_tmpl, argvec, hash);
}
@@ -14815,7 +14812,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
DECL_INITIALIZED_P (r) = 0;
DECL_TEMPLATE_INSTANTIATED (r) = 0;
if (type == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
if (TREE_CODE (type) == FUNCTION_TYPE)
{
/* It may seem that this case cannot occur, since:
@@ -14835,7 +14832,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
/* R is not yet sufficiently initialized, so we
just use its name. */
DECL_NAME (r));
- RETURN (error_mark_node);
+ return error_mark_node;
}
type = complete_type (type);
/* Wait until cp_finish_decl to set this again, to handle
@@ -14952,11 +14949,6 @@ tsubst_decl (tree t, tree args, tsubst_flags_t
complain)
default:
gcc_unreachable ();
}
-#undef RETURN
-
- out:
- /* Restore the file and line information. */
- input_location = saved_loc;
return r;
}
@@ -18120,21 +18112,17 @@ tree
tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
bool integral_constant_expression_p)
{
-#define RETURN(EXP) do { r = (EXP); goto out; } while(0)
#define RECUR(NODE) \
tsubst_expr ((NODE), args, complain, in_decl, \
integral_constant_expression_p)
tree stmt, tmp;
tree r;
- location_t loc;
if (t == NULL_TREE || t == error_mark_node)
return t;
- loc = input_location;
- if (location_t eloc = cp_expr_location (t))
- input_location = eloc;
+ iloc_sentinel ils (cp_expr_location (t));
if (STATEMENT_CODE_P (TREE_CODE (t)))
current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
@@ -18164,14 +18152,12 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
case CO_YIELD_EXPR:
stmt = finish_co_yield_expr (input_location,
RECUR (TREE_OPERAND (t, 0)));
- RETURN (stmt);
- break;
+ return stmt;
case CO_AWAIT_EXPR:
stmt = finish_co_await_expr (input_location,
RECUR (TREE_OPERAND (t, 0)));
- RETURN (stmt);
- break;
+ return stmt;
case EXPR_STMT:
tmp = RECUR (EXPR_STMT_EXPR (t));
@@ -18836,7 +18822,7 @@ tsubst_expr (tree t, tree args, tsubst_flags_t
complain, tree in_decl,
error_at (OMP_CLAUSE_LOCATION (tmp),
"%<#pragma omp critical%> with %<hint%> clause requires "
"a name, except when %<omp_sync_hint_none%> is used");
- RETURN (error_mark_node);
+ return error_mark_node;
}
t = copy_node (t);
OMP_BODY (t) = stmt;
@@ -19062,7 +19048,7 @@ tsubst_expr (tree t, tree args, tsubst_flags_t
complain, tree in_decl,
stmt = build_transaction_expr (EXPR_LOCATION (t),
RECUR (TRANSACTION_EXPR_BODY (t)),
flags, NULL_TREE);
- RETURN (stmt);
+ return stmt;
}
}
break;
@@ -19071,50 +19057,46 @@ tsubst_expr (tree t, tree args, tsubst_flags_t
complain, tree in_decl,
{
tree op0 = RECUR (TREE_OPERAND (t, 0));
tree cond = RECUR (MUST_NOT_THROW_COND (t));
- RETURN (build_must_not_throw_expr (op0, cond));
+ return build_must_not_throw_expr (op0, cond);
}
case EXPR_PACK_EXPANSION:
error ("invalid use of pack expansion expression");
- RETURN (error_mark_node);
+ return error_mark_node;
case NONTYPE_ARGUMENT_PACK:
error ("use %<...%> to expand argument pack");
- RETURN (error_mark_node);
+ return error_mark_node;
case COMPOUND_EXPR:
tmp = RECUR (TREE_OPERAND (t, 0));
if (tmp == NULL_TREE)
/* If the first operand was a statement, we're done with it. */
- RETURN (RECUR (TREE_OPERAND (t, 1)));
- RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
+ return RECUR (TREE_OPERAND (t, 1));
+ return build_x_compound_expr (EXPR_LOCATION (t), tmp,
RECUR (TREE_OPERAND (t, 1)),
- complain));
+ complain);
case ANNOTATE_EXPR:
tmp = RECUR (TREE_OPERAND (t, 0));
- RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
- TREE_TYPE (tmp), tmp,
- RECUR (TREE_OPERAND (t, 1)),
- RECUR (TREE_OPERAND (t, 2))));
+ return build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
+ TREE_TYPE (tmp), tmp,
+ RECUR (TREE_OPERAND (t, 1)),
+ RECUR (TREE_OPERAND (t, 2)));
case PREDICT_EXPR:
- RETURN (add_stmt (copy_node (t)));
+ return add_stmt (copy_node (t));
default:
gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
- RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
+ return tsubst_copy_and_build (t, args, complain, in_decl,
/*function_p=*/false,
- integral_constant_expression_p));
+ integral_constant_expression_p);
}
- RETURN (NULL_TREE);
- out:
- input_location = loc;
- return r;
+ return NULL_TREE;
#undef RECUR
-#undef RETURN
}
/* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
@@ -19485,21 +19467,17 @@ tsubst_copy_and_build (tree t,
bool function_p,
bool integral_constant_expression_p)
{
-#define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
#define RECUR(NODE) \
tsubst_copy_and_build (NODE, args, complain, in_decl, \
/*function_p=*/false, \
integral_constant_expression_p)
- tree retval, op1;
- location_t save_loc;
+ tree op1;
if (t == NULL_TREE || t == error_mark_node)
return t;
- save_loc = input_location;
- if (location_t eloc = cp_expr_location (t))
- input_location = eloc;
+ iloc_sentinel ils (cp_expr_location (t));
/* N3276 decltype magic only applies to calls at the top level or on the
right side of a comma. */
@@ -19551,7 +19529,7 @@ tsubst_copy_and_build (tree t,
unqualified_name_lookup_error (decl);
decl = error_mark_node;
}
- RETURN (decl);
+ return decl;
}
case TEMPLATE_ID_EXPR:
@@ -19566,30 +19544,30 @@ tsubst_copy_and_build (tree t,
if (targs)
targs = tsubst_template_args (targs, args, complain, in_decl);
if (targs == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
if (TREE_CODE (templ) == SCOPE_REF)
{
tree name = TREE_OPERAND (templ, 1);
tree tid = lookup_template_function (name, targs);
TREE_OPERAND (templ, 1) = tid;
- RETURN (templ);
+ return templ;
}
if (concept_definition_p (templ))
{
tree check = build_concept_check (templ, targs, complain);
if (check == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
tree id = unpack_concept_check (check);
/* If we built a function concept check, return the underlying
template-id. So we can evaluate it as a function call. */
if (function_concept_p (TREE_OPERAND (id, 0)))
- RETURN (id);
+ return id;
- RETURN (check);
+ return check;
}
if (variable_template_p (templ))
@@ -19597,7 +19575,7 @@ tsubst_copy_and_build (tree t,
tree r = lookup_and_finish_template_variable (templ, targs,
complain);
r = maybe_wrap_with_location (r, EXPR_LOCATION (t));
- RETURN (r);
+ return r;
}
if (TREE_CODE (templ) == COMPONENT_REF)
@@ -19611,17 +19589,17 @@ tsubst_copy_and_build (tree t,
tree tid = lookup_template_function (templ, targs);
if (object)
- RETURN (build3 (COMPONENT_REF, TREE_TYPE (tid),
- object, tid, NULL_TREE));
+ return build3 (COMPONENT_REF, TREE_TYPE (tid),
+ object, tid, NULL_TREE);
else if (identifier_p (templ))
{
/* C++20 P0846: we can encounter an IDENTIFIER_NODE here when
name lookup found nothing when parsing the template name. */
gcc_assert (cxx_dialect >= cxx20 || seen_error ());
- RETURN (tid);
+ return tid;
}
else
- RETURN (baselink_for_fns (tid));
+ return baselink_for_fns (tid);
}
case INDIRECT_REF:
@@ -19642,14 +19620,14 @@ tsubst_copy_and_build (tree t,
if (REF_PARENTHESIZED_P (t))
r = force_paren_expr (r);
- RETURN (r);
+ return r;
}
case NOP_EXPR:
{
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
tree op0 = RECUR (TREE_OPERAND (t, 0));
- RETURN (build_nop (type, op0));
+ return build_nop (type, op0);
}
case IMPLICIT_CONV_EXPR:
@@ -19658,22 +19636,22 @@ tsubst_copy_and_build (tree t,
tree expr = RECUR (TREE_OPERAND (t, 0));
if (dependent_type_p (type) || type_dependent_expression_p (expr))
{
- retval = copy_node (t);
- TREE_TYPE (retval) = type;
- TREE_OPERAND (retval, 0) = expr;
- RETURN (retval);
+ tree r = copy_node (t);
+ TREE_TYPE (r) = type;
+ TREE_OPERAND (r, 0) = expr;
+ return r;
}
if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
/* We'll pass this to convert_nontype_argument again, we don't need
to actually perform any conversion here. */
- RETURN (expr);
+ return expr;
int flags = LOOKUP_IMPLICIT;
if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
flags = LOOKUP_NORMAL;
if (IMPLICIT_CONV_EXPR_BRACED_INIT (t))
flags |= LOOKUP_NO_NARROWING;
- RETURN (perform_implicit_conversion_flags (type, expr, complain,
- flags));
+ return perform_implicit_conversion_flags (type, expr, complain,
+ flags);
}
case CONVERT_EXPR:
@@ -19681,8 +19659,8 @@ tsubst_copy_and_build (tree t,
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
tree op0 = RECUR (TREE_OPERAND (t, 0));
if (op0 == error_mark_node)
- RETURN (error_mark_node);
- RETURN (build1 (CONVERT_EXPR, type, op0));
+ return error_mark_node;
+ return build1 (CONVERT_EXPR, type, op0);
}
case CAST_EXPR:
@@ -19701,7 +19679,7 @@ tsubst_copy_and_build (tree t,
if (complain & tf_error)
error ("a cast to a type other than an integral or "
"enumeration type cannot appear in a
constant-expression");
- RETURN (error_mark_node);
+ return error_mark_node;
}
op = RECUR (TREE_OPERAND (t, 0));
@@ -19731,22 +19709,22 @@ tsubst_copy_and_build (tree t,
gcc_unreachable ();
}
- RETURN (r);
+ return r;
}
case BIT_CAST_EXPR:
{
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
tree op0 = RECUR (TREE_OPERAND (t, 0));
- RETURN (cp_build_bit_cast (EXPR_LOCATION (t), type, op0, complain));
+ return cp_build_bit_cast (EXPR_LOCATION (t), type, op0, complain);
}
case POSTDECREMENT_EXPR:
case POSTINCREMENT_EXPR:
op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
args, complain, in_decl);
- RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
- complain|decltype_flag));
+ return build_x_unary_op (input_location, TREE_CODE (t), op1,
+ complain|decltype_flag);
case PREDECREMENT_EXPR:
case PREINCREMENT_EXPR:
@@ -19757,9 +19735,9 @@ tsubst_copy_and_build (tree t,
case UNARY_PLUS_EXPR: /* Unary + */
case REALPART_EXPR:
case IMAGPART_EXPR:
- RETURN (build_x_unary_op (input_location, TREE_CODE (t),
- RECUR (TREE_OPERAND (t, 0)),
- complain|decltype_flag));
+ return build_x_unary_op (input_location, TREE_CODE (t),
+ RECUR (TREE_OPERAND (t, 0)),
+ complain|decltype_flag);
case FIX_TRUNC_EXPR:
gcc_unreachable ();
@@ -19767,16 +19745,16 @@ tsubst_copy_and_build (tree t,
case ADDR_EXPR:
op1 = TREE_OPERAND (t, 0);
if (TREE_CODE (op1) == LABEL_DECL)
- RETURN (finish_label_address_expr (DECL_NAME (op1),
- EXPR_LOCATION (op1)));
+ return finish_label_address_expr (DECL_NAME (op1),
+ EXPR_LOCATION (op1));
if (TREE_CODE (op1) == SCOPE_REF)
op1 = tsubst_qualified_id (op1, args, complain, in_decl,
/*done=*/true, /*address_p=*/true);
else
op1 = tsubst_non_call_postfix_expression (op1, args, complain,
in_decl);
- RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
- complain|decltype_flag));
+ return build_x_unary_op (input_location, ADDR_EXPR, op1,
+ complain|decltype_flag);
case PLUS_EXPR:
case MINUS_EXPR:
@@ -19839,23 +19817,23 @@ tsubst_copy_and_build (tree t,
if (EXPR_P (r) && TREE_NO_WARNING (t))
TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
- RETURN (r);
+ return r;
}
case POINTER_PLUS_EXPR:
{
tree op0 = RECUR (TREE_OPERAND (t, 0));
if (op0 == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
tree op1 = RECUR (TREE_OPERAND (t, 1));
if (op1 == error_mark_node)
- RETURN (error_mark_node);
- RETURN (fold_build_pointer_plus (op0, op1));
+ return error_mark_node;
+ return fold_build_pointer_plus (op0, op1);
}
case SCOPE_REF:
- RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
- /*address_p=*/false));
+ return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
+ /*address_p=*/false);
case BASELINK:
return tsubst_baselink (t, current_nonlambda_class_type (),
@@ -19864,14 +19842,14 @@ tsubst_copy_and_build (tree t,
case ARRAY_REF:
op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
args, complain, in_decl);
- RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
- RECUR (TREE_OPERAND (t, 1)),
- complain|decltype_flag));
+ return build_x_array_ref (EXPR_LOCATION (t), op1,
+ RECUR (TREE_OPERAND (t, 1)),
+ complain|decltype_flag);
case SIZEOF_EXPR:
if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
|| ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
- RETURN (tsubst_copy (t, args, complain, in_decl));
+ return tsubst_copy (t, args, complain, in_decl);
/* Fall through */
case ALIGNOF_EXPR:
@@ -19930,7 +19908,7 @@ tsubst_copy_and_build (tree t,
}
SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
}
- RETURN (r);
+ return r;
}
case AT_ENCODE_EXPR:
@@ -19943,7 +19921,7 @@ tsubst_copy_and_build (tree t,
/*integral_constant_expression_p=*/false);
--cp_unevaluated_operand;
--c_inhibit_evaluation_warnings;
- RETURN (objc_build_encode_expr (op1));
+ return objc_build_encode_expr (op1);
}
case NOEXCEPT_EXPR:
@@ -19957,7 +19935,7 @@ tsubst_copy_and_build (tree t,
--cp_unevaluated_operand;
--c_inhibit_evaluation_warnings;
--cp_noexcept_operand;
- RETURN (finish_noexcept_expr (op1, complain));
+ return finish_noexcept_expr (op1, complain);
case MODOP_EXPR:
{
@@ -19976,7 +19954,7 @@ tsubst_copy_and_build (tree t,
if (TREE_NO_WARNING (t))
TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
- RETURN (r);
+ return r;
}
case ARROW_EXPR:
@@ -19985,8 +19963,8 @@ tsubst_copy_and_build (tree t,
/* Remember that there was a reference to this entity. */
if (DECL_P (op1)
&& !mark_used (op1, complain) && !(complain & tf_error))
- RETURN (error_mark_node);
- RETURN (build_x_arrow (input_location, op1, complain));
+ return error_mark_node;
+ return build_x_arrow (input_location, op1, complain);
case NEW_EXPR:
{
@@ -20000,7 +19978,7 @@ tsubst_copy_and_build (tree t,
if (placement == NULL_TREE)
placement_vec = NULL;
else if (placement == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
else
{
placement_vec = make_tree_vector ();
@@ -20017,7 +19995,7 @@ tsubst_copy_and_build (tree t,
if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
init_vec = NULL;
else if (init == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
else
{
init_vec = make_tree_vector ();
@@ -20044,17 +20022,17 @@ tsubst_copy_and_build (tree t,
if (init_vec != NULL)
release_tree_vector (init_vec);
- RETURN (ret);
+ return ret;
}
case DELETE_EXPR:
{
tree op0 = RECUR (TREE_OPERAND (t, 0));
tree op1 = RECUR (TREE_OPERAND (t, 1));
- RETURN (delete_sanity (input_location, op0, op1,
- DELETE_EXPR_USE_VEC (t),
- DELETE_EXPR_USE_GLOBAL (t),
- complain));
+ return delete_sanity (input_location, op0, op1,
+ DELETE_EXPR_USE_VEC (t),
+ DELETE_EXPR_USE_GLOBAL (t),
+ complain);
}
case COMPOUND_EXPR:
@@ -20063,10 +20041,10 @@ tsubst_copy_and_build (tree t,
complain & ~tf_decltype, in_decl,
/*function_p=*/false,
integral_constant_expression_p);
- RETURN (build_x_compound_expr (EXPR_LOCATION (t),
- op0,
- RECUR (TREE_OPERAND (t, 1)),
- complain|decltype_flag));
+ return build_x_compound_expr (EXPR_LOCATION (t),
+ op0,
+ RECUR (TREE_OPERAND (t, 1)),
+ complain|decltype_flag);
}
case CALL_EXPR:
@@ -20080,7 +20058,7 @@ tsubst_copy_and_build (tree t,
function = CALL_EXPR_FN (t);
/* Internal function with no arguments. */
if (function == NULL_TREE && call_expr_nargs (t) == 0)
- RETURN (t);
+ return t;
/* When we parsed the expression, we determined whether or
not Koenig lookup should be performed. */
@@ -20224,7 +20202,7 @@ tsubst_copy_and_build (tree t,
if (CLASS_TYPE_P (TREE_TYPE (ret)))
CALL_EXPR_RETURN_SLOT_OPT (ret) = true;
- RETURN (ret);
+ return ret;
}
/* We do not perform argument-dependent lookup if normal
@@ -20263,7 +20241,7 @@ tsubst_copy_and_build (tree t,
(function, args, complain, in_decl, true,
integral_constant_expression_p));
if (unq == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
if (unq != function)
{
@@ -20317,7 +20295,7 @@ tsubst_copy_and_build (tree t,
"%qD declared here, later in the "
"translation unit", fn);
if (in_lambda)
- RETURN (error_mark_node);
+ return error_mark_node;
}
function = unq;
@@ -20327,7 +20305,7 @@ tsubst_copy_and_build (tree t,
{
if (complain & tf_error)
unqualified_name_lookup_error (function);
- RETURN (error_mark_node);
+ return error_mark_node;
}
}
@@ -20335,7 +20313,7 @@ tsubst_copy_and_build (tree t,
if (function != NULL_TREE
&& DECL_P (function)
&& !mark_used (function, complain) && !(complain & tf_error))
- RETURN (error_mark_node);
+ return error_mark_node;
/* Put back tf_decltype for the actual call. */
complain |= decltype_flag;
@@ -20372,7 +20350,7 @@ tsubst_copy_and_build (tree t,
complain, in_decl),
complain);
if (TREE_CODE (ret) == VIEW_CONVERT_EXPR)
- RETURN (ret);
+ return ret;
break;
default:
@@ -20443,7 +20421,7 @@ tsubst_copy_and_build (tree t,
}
}
- RETURN (ret);
+ return ret;
}
case COND_EXPR:
@@ -20478,8 +20456,8 @@ tsubst_copy_and_build (tree t,
}
warning_sentinel s(warn_duplicated_branches);
- RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
- cond, exp1, exp2, complain));
+ return build_x_conditional_expr (EXPR_LOCATION (t),
+ cond, exp1, exp2, complain);
}
case PSEUDO_DTOR_EXPR:
@@ -20487,12 +20465,12 @@ tsubst_copy_and_build (tree t,
tree op0 = RECUR (TREE_OPERAND (t, 0));
tree op1 = RECUR (TREE_OPERAND (t, 1));
tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
- RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
- input_location));
+ return finish_pseudo_destructor_expr (op0, op1, op2,
+ input_location);
}
case TREE_LIST:
- RETURN (tsubst_tree_list (t, args, complain, in_decl));
+ return tsubst_tree_list (t, args, complain, in_decl);
case COMPONENT_REF:
{
@@ -20506,7 +20484,7 @@ tsubst_copy_and_build (tree t,
/* Remember that there was a reference to this entity. */
if (DECL_P (object)
&& !mark_used (object, complain) && !(complain & tf_error))
- RETURN (error_mark_node);
+ return error_mark_node;
object_type = TREE_TYPE (object);
member = TREE_OPERAND (t, 1);
@@ -20517,14 +20495,14 @@ tsubst_copy_and_build (tree t,
else
member = tsubst_copy (member, args, complain, in_decl);
if (member == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
if (TREE_CODE (member) == FIELD_DECL)
{
r = finish_non_static_data_member (member, object, NULL_TREE);
if (TREE_CODE (r) == COMPONENT_REF)
REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
- RETURN (r);
+ return r;
}
else if (type_dependent_expression_p (object))
/* We can't do much here. */;
@@ -20544,7 +20522,7 @@ tsubst_copy_and_build (tree t,
{
dtor = TREE_OPERAND (dtor, 0);
if (TYPE_P (dtor))
- RETURN (finish_pseudo_destructor_expr
+ return (finish_pseudo_destructor_expr
(object, s, dtor, input_location));
}
}
@@ -20572,7 +20550,7 @@ tsubst_copy_and_build (tree t,
{
qualified_name_lookup_error (scope, tmpl, member,
input_location);
- RETURN (error_mark_node);
+ return error_mark_node;
}
}
else if (TREE_CODE (member) == SCOPE_REF
@@ -20588,7 +20566,7 @@ tsubst_copy_and_build (tree t,
error ("%qD is not a class or namespace",
TREE_OPERAND (member, 0));
}
- RETURN (error_mark_node);
+ return error_mark_node;
}
r = finish_class_member_access_expr (object, member,
@@ -20596,12 +20574,11 @@ tsubst_copy_and_build (tree t,
complain);
if (TREE_CODE (r) == COMPONENT_REF)
REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
- RETURN (r);
+ return r;
}
case THROW_EXPR:
- RETURN (build_throw
- (input_location, RECUR (TREE_OPERAND (t, 0))));
+ return build_throw (input_location, RECUR (TREE_OPERAND (t, 0)));
case CONSTRUCTOR:
{
@@ -20615,7 +20592,7 @@ tsubst_copy_and_build (tree t,
tree r;
if (type == error_mark_node)
- RETURN (error_mark_node);
+ return error_mark_node;
/* We do not want to process the index of aggregate
initializers as they are identifier nodes which will be
@@ -20625,7 +20602,7 @@ tsubst_copy_and_build (tree t,
if (null_member_pointer_value_p (t))
{
gcc_assert (same_type_p (type, TREE_TYPE (t)));
- RETURN (t);
+ return t;
}
n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
@@ -20692,11 +20669,11 @@ tsubst_copy_and_build (tree t,
fcl_t cl = fcl_functional;
if (CONSTRUCTOR_C99_COMPOUND_LITERAL (t))
cl = fcl_c99;
- RETURN (finish_compound_literal (type, r, complain, cl));
+ return finish_compound_literal (type, r, complain, cl);
}
TREE_TYPE (r) = type;
- RETURN (r);
+ return r;
}
case TYPEID_EXPR:
@@ -20705,18 +20682,18 @@ tsubst_copy_and_build (tree t,
if (TYPE_P (operand_0))
{
operand_0 = tsubst (operand_0, args, complain, in_decl);
- RETURN (get_typeid (operand_0, complain));
+ return get_typeid (operand_0, complain);
}
else
{
operand_0 = RECUR (operand_0);
- RETURN (build_typeid (operand_0, complain));
+ return build_typeid (operand_0, complain);
}
}
case VAR_DECL:
if (!args)
- RETURN (t);
+ return t;
/* Fall through */
case PARM_DECL:
@@ -20734,14 +20711,14 @@ tsubst_copy_and_build (tree t,
/* If the original type was a reference, we'll be wrapped in
the appropriate INDIRECT_REF. */
r = convert_from_reference (r);
- RETURN (r);
+ return r;
}
case VA_ARG_EXPR:
{
tree op0 = RECUR (TREE_OPERAND (t, 0));
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
- RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
+ return build_x_va_arg (EXPR_LOCATION (t), op0, type);
}
case OFFSETOF_EXPR:
@@ -20750,14 +20727,14 @@ tsubst_copy_and_build (tree t,
= tsubst_copy_and_build (TREE_OPERAND (t, 1), args, complain,
in_decl, /*function_p=*/false,
/*integral_constant_expression_p=*/false);
- RETURN (finish_offsetof (object_ptr,
- RECUR (TREE_OPERAND (t, 0)),
- EXPR_LOCATION (t)));
+ return finish_offsetof (object_ptr,
+ RECUR (TREE_OPERAND (t, 0)),
+ EXPR_LOCATION (t));
}
case ADDRESSOF_EXPR:
- RETURN (cp_build_addressof (EXPR_LOCATION (t),
- RECUR (TREE_OPERAND (t, 0)), complain));
+ return cp_build_addressof (EXPR_LOCATION (t),
+ RECUR (TREE_OPERAND (t, 0)), complain);
case TRAIT_EXPR:
{
@@ -20765,8 +20742,8 @@ tsubst_copy_and_build (tree t,
complain, in_decl);
tree type2 = tsubst (TRAIT_EXPR_TYPE2 (t), args,
complain, in_decl);
- RETURN (finish_trait_expr (TRAIT_EXPR_LOCATION (t),
- TRAIT_EXPR_KIND (t), type1, type2));
+ return finish_trait_expr (TRAIT_EXPR_LOCATION (t),
+ TRAIT_EXPR_KIND (t), type1, type2);
}
case STMT_EXPR:
@@ -20785,7 +20762,7 @@ tsubst_copy_and_build (tree t,
if (empty_expr_stmt_p (stmt_expr))
stmt_expr = void_node;
- RETURN (stmt_expr);
+ return stmt_expr;
}
case LAMBDA_EXPR:
@@ -20799,7 +20776,7 @@ tsubst_copy_and_build (tree t,
}
tree r = tsubst_lambda_expr (t, args, complain, in_decl);
- RETURN (build_lambda_object (r));
+ return build_lambda_object (r);
}
case TARGET_EXPR:
@@ -20808,43 +20785,43 @@ tsubst_copy_and_build (tree t,
{
tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
complain);
- RETURN (r);
+ return r;
}
case TRANSACTION_EXPR:
- RETURN (tsubst_expr(t, args, complain, in_decl,
- integral_constant_expression_p));
+ return tsubst_expr (t, args, complain, in_decl,
+ integral_constant_expression_p);
case PAREN_EXPR:
- RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
+ return finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0)));
case VEC_PERM_EXPR:
{
tree op0 = RECUR (TREE_OPERAND (t, 0));
tree op1 = RECUR (TREE_OPERAND (t, 1));
tree op2 = RECUR (TREE_OPERAND (t, 2));
- RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
- complain));
+ return build_x_vec_perm_expr (input_location, op0, op1, op2,
+ complain);
}
case REQUIRES_EXPR:
{
tree r = tsubst_requires_expr (t, args, tf_none, in_decl);
- RETURN (r);
+ return r;
}
case RANGE_EXPR:
/* No need to substitute further, a RANGE_EXPR will always be built
with constant operands. */
- RETURN (t);
+ return t;
case NON_LVALUE_EXPR:
case VIEW_CONVERT_EXPR:
if (location_wrapper_p (t))
/* We need to do this here as well as in tsubst_copy so we get the
other tsubst_copy_and_build semantics for a PARM_DECL operand. */
- RETURN (maybe_wrap_with_location (RECUR (TREE_OPERAND (t, 0)),
- EXPR_LOCATION (t)));
+ return maybe_wrap_with_location (RECUR (TREE_OPERAND (t, 0)),
+ EXPR_LOCATION (t));
/* fallthrough. */
default:
@@ -20854,16 +20831,13 @@ tsubst_copy_and_build (tree t,
= objcp_tsubst_copy_and_build (t, args, complain,
in_decl, /*function_p=*/false);
if (subst)
- RETURN (subst);
+ return subst;
}
- RETURN (tsubst_copy (t, args, complain, in_decl));
+ return tsubst_copy (t, args, complain, in_decl);
}
+ gcc_unreachable ();
#undef RECUR
-#undef RETURN
- out:
- input_location = save_loc;
- return retval;
}
/* Verify that the instantiated ARGS are valid. For type arguments,