https://gcc.gnu.org/g:ff6994e483be5bd340bfacc50d3441bd21aba1c4
commit r15-2177-gff6994e483be5bd340bfacc50d3441bd21aba1c4 Author: Andi Kleen <a...@gcc.gnu.org> Date: Sat Jul 20 16:07:41 2024 -0700 Revert "C++: Support clang compatible [[musttail]] (PR83324)" This reverts commit 59dd1d7ab21ad9a7ebf641ec9aeea609c003ad2f. Diff: --- gcc/c-family/c-attribs.cc | 20 -------------------- gcc/c-family/c-common.h | 1 - gcc/cp/cp-tree.h | 4 ---- gcc/cp/parser.cc | 32 +++----------------------------- gcc/cp/pt.cc | 9 +-------- gcc/cp/semantics.cc | 1 - 6 files changed, 4 insertions(+), 63 deletions(-) diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc index 685f212683f4..5adc7b775eaf 100644 --- a/gcc/c-family/c-attribs.cc +++ b/gcc/c-family/c-attribs.cc @@ -672,26 +672,6 @@ attribute_takes_identifier_p (const_tree attr_id) return targetm.attribute_takes_identifier_p (attr_id); } -/* Set a musttail attribute MUSTTAIL_P on return expression RETVAL - at LOC. */ - -void -set_musttail_on_return (tree retval, location_t loc, bool musttail_p) -{ - if (retval && musttail_p) - { - tree t = retval; - if (TREE_CODE (t) == TARGET_EXPR) - t = TARGET_EXPR_INITIAL (t); - if (TREE_CODE (t) != CALL_EXPR) - error_at (loc, "cannot tail-call: return value must be a call"); - else - CALL_EXPR_MUST_TAIL_CALL (t) = 1; - } - else if (musttail_p && !retval) - error_at (loc, "cannot tail-call: return value must be a call"); -} - /* Verify that argument value POS at position ARGNO to attribute NAME applied to function FN (which is either a function declaration or function type) refers to a function parameter at position POS and the expected type diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 2510ee4dbc9d..adee822a3ae0 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -1648,7 +1648,6 @@ extern tree handle_noreturn_attribute (tree *, tree, tree, int, bool *); extern tree handle_musttail_attribute (tree *, tree, tree, int, bool *); extern bool has_attribute (location_t, tree, tree, tree (*)(tree)); extern tree build_attr_access_from_parms (tree, bool); -extern void set_musttail_on_return (tree, location_t, bool); /* In c-format.cc. */ extern bool valid_format_string_type_p (tree); diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index c6728328bc6f..609d8941cf72 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -4236,10 +4236,6 @@ templated_operator_saved_lookups (tree t) #define AGGR_INIT_FROM_THUNK_P(NODE) \ (AGGR_INIT_EXPR_CHECK (NODE)->base.protected_flag) -/* Nonzero means that the call was marked musttail. */ -#define AGGR_INIT_EXPR_MUST_TAIL(NODE) \ - (AGGR_INIT_EXPR_CHECK (NODE)->base.static_flag) - /* AGGR_INIT_EXPR accessors. These are equivalent to the CALL_EXPR accessors, except for AGGR_INIT_EXPR_SLOT (which takes the place of CALL_EXPR_STATIC_CHAIN). */ diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 1fa0780944b6..efd5d6f29a71 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -2467,7 +2467,7 @@ static tree cp_parser_perform_range_for_lookup static tree cp_parser_range_for_member_function (tree, tree); static tree cp_parser_jump_statement - (cp_parser *, tree &); + (cp_parser *); static void cp_parser_declaration_statement (cp_parser *); @@ -12757,7 +12757,7 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr, case RID_CO_RETURN: case RID_GOTO: std_attrs = process_stmt_hotness_attribute (std_attrs, attrs_loc); - statement = cp_parser_jump_statement (parser, std_attrs); + statement = cp_parser_jump_statement (parser); break; /* Objective-C++ exception-handling constructs. */ @@ -14845,11 +14845,10 @@ cp_parser_init_statement (cp_parser *parser, tree *decl) jump-statement: goto * expression ; - STD_ATTRS are the statement attributes. They can be modified. Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR. */ static tree -cp_parser_jump_statement (cp_parser* parser, tree &std_attrs) +cp_parser_jump_statement (cp_parser* parser) { tree statement = error_mark_node; cp_token *token; @@ -14926,31 +14925,6 @@ cp_parser_jump_statement (cp_parser* parser, tree &std_attrs) /* If the next token is a `;', then there is no expression. */ expr = NULL_TREE; - - if (keyword == RID_RETURN) - { - bool musttail_p = false; - if (lookup_attribute ("gnu", "musttail", std_attrs)) - { - musttail_p = true; - std_attrs = remove_attribute ("gnu", "musttail", std_attrs); - } - /* Support this for compatibility. */ - if (lookup_attribute ("clang", "musttail", std_attrs)) - { - musttail_p = true; - std_attrs = remove_attribute ("clang", "musttail", std_attrs); - } - - tree ret_expr = expr; - if (ret_expr && TREE_CODE (ret_expr) == TARGET_EXPR) - ret_expr = TARGET_EXPR_INITIAL (ret_expr); - if (ret_expr && TREE_CODE (ret_expr) == AGGR_INIT_EXPR) - AGGR_INIT_EXPR_MUST_TAIL (ret_expr) = musttail_p; - else - set_musttail_on_return (expr, token->location, musttail_p); - } - /* Build the return-statement, check co-return first, since type deduction is not valid there. */ if (keyword == RID_CO_RETURN) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 9fae3000203a..108e929b8ee6 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -21094,19 +21094,12 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) bool op = CALL_EXPR_OPERATOR_SYNTAX (t); bool ord = CALL_EXPR_ORDERED_ARGS (t); bool rev = CALL_EXPR_REVERSE_ARGS (t); - bool mtc = false; - if (TREE_CODE (t) == CALL_EXPR) - mtc = CALL_EXPR_MUST_TAIL_CALL (t); - if (op || ord || rev || mtc) + if (op || ord || rev) if (tree call = extract_call_expr (ret)) { CALL_EXPR_OPERATOR_SYNTAX (call) = op; CALL_EXPR_ORDERED_ARGS (call) = ord; CALL_EXPR_REVERSE_ARGS (call) = rev; - if (TREE_CODE (call) == CALL_EXPR) - CALL_EXPR_MUST_TAIL_CALL (call) = mtc; - else if (TREE_CODE (call) == AGGR_INIT_EXPR) - AGGR_INIT_EXPR_MUST_TAIL (call) = mtc; } if (warning_suppressed_p (t, OPT_Wpessimizing_move)) /* This also suppresses -Wredundant-move. */ diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 0f122b839c5f..c21572e5d7f7 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -4979,7 +4979,6 @@ simplify_aggr_init_expr (tree *tp) = CALL_EXPR_OPERATOR_SYNTAX (aggr_init_expr); CALL_EXPR_ORDERED_ARGS (call_expr) = CALL_EXPR_ORDERED_ARGS (aggr_init_expr); CALL_EXPR_REVERSE_ARGS (call_expr) = CALL_EXPR_REVERSE_ARGS (aggr_init_expr); - CALL_EXPR_MUST_TAIL_CALL (call_expr) = AGGR_INIT_EXPR_MUST_TAIL (aggr_init_expr); if (style == ctor) {