From: Jason Merrill Date: Wed, 25 Aug 2021 19:10:21 +0000 (-0400) Subject: c++: Various small fixes X-Git-Tag: basepoints/gcc-13~5039 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c6344c10de1c90015c68adfb880291af980b886;p=thirdparty%2Fgcc.git 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 --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 47c79e58db53..25269d9e51a7 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 3414cbdc8760..e981eadc6dd8 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 ccbde292c229..4b2ad6f3db80 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 1e2a4b121eaf..d3c31be09670 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;