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.

Tested x86_64-pc-linux-gnu, applying to trunk.

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.
---
 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<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 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;

base-commit: e4cb3bb9ac11b4126ffa718287dd509a4b10a658
-- 
2.27.0

Reply via email to