From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id ADDD83858C27; Tue, 31 Aug 2021 19:54:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ADDD83858C27 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jason Merrill To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-3274] c++: Various small fixes X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/master X-Git-Oldrev: e4cb3bb9ac11b4126ffa718287dd509a4b10a658 X-Git-Newrev: 9c6344c10de1c90015c68adfb880291af980b886 Message-Id: <20210831195437.ADDD83858C27@sourceware.org> Date: Tue, 31 Aug 2021 19:54:37 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Aug 2021 19:54:37 -0000 https://gcc.gnu.org/g:9c6344c10de1c90015c68adfb880291af980b886 commit r12-3274-g9c6344c10de1c90015c68adfb880291af980b886 Author: Jason Merrill Date: Wed Aug 25 15:10:21 2021 -0400 c++: Various small fixes A copy-paste error, a couple of missed checks to guard undefined accesses, and we don't need to use type_uses_auto to extract the auto node we just built. gcc/cp/ChangeLog: * coroutines.cc (flatten_await_stmt): Fix copyo. * decl.c (reshape_init_class): Simplify. * module.cc (module_state::read_language): Add null check. * parser.c (build_range_temp): Avoid type_uses_auto. (cp_parser_class_specifier_1): Add null check. Diff: --- gcc/cp/coroutines.cc | 2 +- gcc/cp/decl.c | 3 +-- gcc/cp/module.cc | 2 +- gcc/cp/parser.c | 15 +++++++-------- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 47c79e58db5..25269d9e51a 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -2905,7 +2905,7 @@ flatten_await_stmt (var_nest_node *n, hash_set *promoted, tree else_cl = COND_EXPR_ELSE (old_expr); if (!VOID_TYPE_P (TREE_TYPE (else_cl))) { - gcc_checking_assert (TREE_CODE (then_cl) != STATEMENT_LIST); + gcc_checking_assert (TREE_CODE (else_cl) != STATEMENT_LIST); else_cl = build2 (init_expr ? INIT_EXPR : MODIFY_EXPR, var_type, var, else_cl); diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 3414cbdc876..e981eadc6dd 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -6563,8 +6563,7 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p, continue_: if (base_binfo) { - BINFO_BASE_ITERATE (binfo, ++binfo_idx, base_binfo); - if (base_binfo) + if (BINFO_BASE_ITERATE (binfo, ++binfo_idx, base_binfo)) field = base_binfo; else field = next_initializable_field (TYPE_FIELDS (type)); diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index ccbde292c22..4b2ad6f3db8 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -17977,7 +17977,7 @@ module_state::read_language (bool outermost) function_depth++; /* Prevent unexpected GCs. */ - if (counts[MSC_entities] != entity_num) + if (ok && counts[MSC_entities] != entity_num) ok = false; if (ok && counts[MSC_entities] && !read_entities (counts[MSC_entities], diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 1e2a4b121ea..d3c31be0967 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -13474,17 +13474,15 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl, static tree build_range_temp (tree range_expr) { - tree range_type, range_temp; - /* Find out the type deduced by the declaration `auto &&__range = range_expr'. */ - range_type = cp_build_reference_type (make_auto (), true); - range_type = do_auto_deduction (range_type, range_expr, - type_uses_auto (range_type)); + tree auto_node = make_auto (); + tree range_type = cp_build_reference_type (auto_node, true); + range_type = do_auto_deduction (range_type, range_expr, auto_node); /* Create the __range variable. */ - range_temp = build_decl (input_location, VAR_DECL, for_range__identifier, - range_type); + tree range_temp = build_decl (input_location, VAR_DECL, + for_range__identifier, range_type); TREE_USED (range_temp) = 1; DECL_ARTIFICIAL (range_temp) = 1; @@ -25910,7 +25908,8 @@ cp_parser_class_specifier_1 (cp_parser* parser) so that maybe_instantiate_noexcept can tsubst the NOEXCEPT_EXPR in the pattern. */ for (tree i : DEFPARSE_INSTANTIATIONS (def_parse)) - DEFERRED_NOEXCEPT_PATTERN (TREE_PURPOSE (i)) = TREE_PURPOSE (spec); + DEFERRED_NOEXCEPT_PATTERN (TREE_PURPOSE (i)) + = spec ? TREE_PURPOSE (spec) : error_mark_node; /* Restore the state of local_variables_forbidden_p. */ parser->local_variables_forbidden_p = local_variables_forbidden_p;