diff options
author | Jason Merrill <jason@redhat.com> | 2021-08-25 15:10:21 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2021-08-31 15:54:25 -0400 |
commit | 9c6344c10de1c90015c68adfb880291af980b886 (patch) | |
tree | e41045d74d9b32a9b9b9ec0ceaf53e025a79f157 | |
parent | e4cb3bb9ac11b4126ffa718287dd509a4b10a658 (diff) | |
download | gcc-9c6344c10de1c90015c68adfb880291af980b886.zip gcc-9c6344c10de1c90015c68adfb880291af980b886.tar.gz gcc-9c6344c10de1c90015c68adfb880291af980b886.tar.bz2 |
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.
-rw-r--r-- | gcc/cp/coroutines.cc | 2 | ||||
-rw-r--r-- | gcc/cp/decl.c | 3 | ||||
-rw-r--r-- | gcc/cp/module.cc | 2 | ||||
-rw-r--r-- | 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 47c79e5..25269d9 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -2905,7 +2905,7 @@ flatten_await_stmt (var_nest_node *n, hash_set<tree> *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 3414cbd..e981ead 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 ccbde29..4b2ad6f 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 1e2a4b1..d3c31be 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; |