]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Avoid some -Wunreachable-code-ctrl
authorRichard Biener <rguenther@suse.de>
Mon, 29 Nov 2021 14:20:38 +0000 (15:20 +0100)
committerRichard Biener <rguenther@suse.de>
Tue, 30 Nov 2021 07:23:26 +0000 (08:23 +0100)
This cleans up unreachable code diagnosed by -Wunreachable-code-ctrl.
It largely follows the previous series but discovers a few extra
cases, namely dead code after break or continue or loops without
exits.

2021-11-29  Richard Biener  <rguenther@suse.de>

gcc/c/
* gimple-parser.c (c_parser_gimple_postfix_expression):
avoid unreachable code after break.

gcc/
* cfgrtl.c (skip_insns_after_block): Refactor code to
be more easily readable.
* expr.c (op_by_pieces_d::run): Remove unreachable
assert.
* sched-deps.c (sched_analyze): Remove unreachable
gcc_unreachable.
* sel-sched-ir.c (in_same_ebb_p): Likewise.
* tree-ssa-alias.c (nonoverlapping_refs_since_match_p):
Remove unreachable code.
* tree-vect-slp.c (vectorize_slp_instance_root_stmt):
Refactor to avoid unreachable loop iteration.
* tree.c (walk_tree_1): Remove unreachable break.
* vec-perm-indices.c (vec_perm_indices::series_p): Remove
unreachable return.

gcc/cp/
* parser.c (cp_parser_postfix_expression): Remove
unreachable code.
* pt.c (tsubst_expr): Remove unreachable breaks.

gcc/fortran/
* frontend-passes.c (gfc_expr_walker): Remove unreachable
break.
* scanner.c (skip_fixed_comments): Remove unreachable
gcc_unreachable.
* trans-expr.c (gfc_expr_is_variable): Refactor to make
control flow more obvious.

14 files changed:
gcc/c/gimple-parser.c
gcc/cfgrtl.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/expr.c
gcc/fortran/frontend-passes.c
gcc/fortran/scanner.c
gcc/fortran/trans-expr.c
gcc/sched-deps.c
gcc/sel-sched-ir.c
gcc/tree-ssa-alias.c
gcc/tree-vect-slp.c
gcc/tree.c
gcc/vec-perm-indices.c

index 32f22dbb8a73ae14a883dc1629b4fb6a6afbae05..f594a8ccb3184a8c8c475960f170cdca9a9d38c7 100644 (file)
@@ -1698,13 +1698,7 @@ c_parser_gimple_postfix_expression (gimple_parser &parser)
            }
          break;
        }
-      else
-       {
-         c_parser_error (parser, "expected expression");
-         expr.set_error ();
-         break;
-       }
-      break;
+      /* Fallthru.  */
     default:
       c_parser_error (parser, "expected expression");
       expr.set_error ();
index 3744adcc2ba1045836406a244a628a9d860bc259..287a3db643a345374a504f6f17bd8bbab71da979 100644 (file)
@@ -3539,14 +3539,8 @@ skip_insns_after_block (basic_block bb)
          continue;
 
        case NOTE:
-         switch (NOTE_KIND (insn))
-           {
-           case NOTE_INSN_BLOCK_END:
-             gcc_unreachable ();
-           default:
-             continue;
-           }
-         break;
+         gcc_assert (NOTE_KIND (insn) != NOTE_INSN_BLOCK_END);
+         continue;
 
        case CODE_LABEL:
          if (NEXT_INSN (insn)
index 899797b0c79910ce7f7c95ff86a6861ea34e8b84..55e6a1a8b3ab1288e67a4792db9546ec5d498ece 100644 (file)
@@ -7892,10 +7892,6 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
             return postfix_expression;
        }
     }
-
-  /* We should never get here.  */
-  gcc_unreachable ();
-  return error_mark_node;
 }
 
 /* Helper function for cp_parser_parenthesized_expression_list and
index 74323701a7dd29ce4f041e2eb34ec81b12c9a93e..6e25a3891a524c82eb3037a85cc94f34e69efb65 100644 (file)
@@ -18245,13 +18245,11 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
       stmt = finish_co_yield_expr (input_location,
                                   RECUR (TREE_OPERAND (t, 0)));
       RETURN (stmt);
-      break;
 
     case CO_AWAIT_EXPR:
       stmt = finish_co_await_expr (input_location,
                                   RECUR (TREE_OPERAND (t, 0)));
       RETURN (stmt);
-      break;
 
     case EXPR_STMT:
       tmp = RECUR (EXPR_STMT_EXPR (t));
index 5673902b1fcddb665c1544694c28bb862a29b3d3..b281525750978176b22322de20515b3d33164cdd 100644 (file)
@@ -1342,9 +1342,6 @@ op_by_pieces_d::run ()
        }
     }
   while (1);
-
-  /* The code above should have handled everything.  */
-  gcc_assert (!length);
 }
 
 /* Derived class from op_by_pieces_d, providing support for block move
index f5ba7cecd545a8943d7155a73d8fd826af5389d6..16ee2afc9c0a51378b490b8a5bf71af066c5e4a7 100644 (file)
@@ -5229,7 +5229,6 @@ gfc_expr_walker (gfc_expr **e, walk_expr_fn_t exprfn, void *data)
          case EXPR_OP:
            WALK_SUBEXPR ((*e)->value.op.op1);
            WALK_SUBEXPR_TAIL ((*e)->value.op.op2);
-           break;
          case EXPR_FUNCTION:
            for (a = (*e)->value.function.actual; a; a = a->next)
              WALK_SUBEXPR (a->expr);
index 69b81ab97f8f04f7bec7972e4243d7be08847ba9..4d72ff78543f29d6d272debf669c5af9a7c75dd2 100644 (file)
@@ -1159,7 +1159,6 @@ skip_fixed_comments (void)
          skip_comment_line ();
          continue;
 
-         gcc_unreachable ();
 check_for_digits:
          {
            /* Required for OpenMP's conditional compilation sentinel. */
index bc502c0f43c668b50ab535dd161586b369a337e4..e413b2d7a1f91db25030e2666c0dca5322d4e2ce 100644 (file)
@@ -11079,14 +11079,9 @@ gfc_expr_is_variable (gfc_expr *expr)
          func_ifc = expr->value.function.esym;
          goto found_ifc;
        }
-      else
-       {
-         gcc_assert (expr->symtree);
-         func_ifc = expr->symtree->n.sym;
-         goto found_ifc;
-       }
-
-      gcc_unreachable ();
+      gcc_assert (expr->symtree);
+      func_ifc = expr->symtree->n.sym;
+      goto found_ifc;
     }
 
   comp = gfc_get_proc_ptr_comp (expr);
index 5814204c681bc9d2336c4bcf29d2fcc7b4e6a68b..62aa47a73bd2d34913ddaec0b606982a412cfa87 100644 (file)
@@ -3816,7 +3816,6 @@ sched_analyze (class deps_desc *deps, rtx_insn *head, rtx_insn *tail)
 
   for (insn = head;; insn = NEXT_INSN (insn))
     {
-
       if (INSN_P (insn))
        {
          /* And initialize deps_lists.  */
@@ -3836,7 +3835,6 @@ sched_analyze (class deps_desc *deps, rtx_insn *head, rtx_insn *tail)
          return;
        }
     }
-  gcc_unreachable ();
 }
 
 /* Helper for sched_free_deps ().
index 48965bfb0adca8d99048e67a94cf2f79abb54251..b76a48eb16ecce5fb712785b02525ed6a6072deb 100644 (file)
@@ -4918,9 +4918,6 @@ in_same_ebb_p (insn_t insn, insn_t succ)
 
       ptr = bb_next_bb (ptr);
     }
-
-  gcc_unreachable ();
-  return false;
 }
 
 /* Recomputes the reverse topological order for the function and
index 3c253e2843ff6de290674e58f0a794f92ff4193b..88fd7821c5e55bd63988ac1df98e108d0400c244 100644 (file)
@@ -1800,9 +1800,6 @@ nonoverlapping_refs_since_match_p (tree match1, tree ref1,
          return 1;
        }
     }
-
-  ++alias_stats.nonoverlapping_refs_since_match_p_must_overlap;
-  return 0;
 }
 
 /* Return TYPE_UID which can be used to match record types we consider
index 94c75497495b6f28358120bc14af001fcaf027f4..cfea0c80be38f6b716603e811c3b800ed1e2ce66 100644 (file)
@@ -7311,20 +7311,14 @@ vectorize_slp_instance_root_stmt (slp_tree node, slp_instance instance)
     {
       if (SLP_TREE_NUMBER_OF_VEC_STMTS (node) == 1)
        {
-         gimple *child_stmt;
-         int j;
-
-         FOR_EACH_VEC_ELT (SLP_TREE_VEC_STMTS (node), j, child_stmt)
-           {
-             tree vect_lhs = gimple_get_lhs (child_stmt);
-             tree root_lhs = gimple_get_lhs (instance->root_stmts[0]->stmt);
-             if (!useless_type_conversion_p (TREE_TYPE (root_lhs),
-                                             TREE_TYPE (vect_lhs)))
-               vect_lhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (root_lhs),
-                                  vect_lhs);
-             rstmt = gimple_build_assign (root_lhs, vect_lhs);
-             break;
-           }
+         gimple *child_stmt = SLP_TREE_VEC_STMTS (node)[0];
+         tree vect_lhs = gimple_get_lhs (child_stmt);
+         tree root_lhs = gimple_get_lhs (instance->root_stmts[0]->stmt);
+         if (!useless_type_conversion_p (TREE_TYPE (root_lhs),
+                                         TREE_TYPE (vect_lhs)))
+           vect_lhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (root_lhs),
+                              vect_lhs);
+         rstmt = gimple_build_assign (root_lhs, vect_lhs);
        }
       else if (SLP_TREE_NUMBER_OF_VEC_STMTS (node) > 1)
        {
index 910fb06d6f551947fae235b99a4cd88bd84e3c85..4d91fdea758ebc2382d36e4abf12911c7f929b24 100644 (file)
@@ -11127,7 +11127,6 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
     case TREE_LIST:
       WALK_SUBTREE (TREE_VALUE (*tp));
       WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
-      break;
 
     case TREE_VEC:
       {
@@ -11206,7 +11205,6 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
          WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
        WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
       }
-      break;
 
     case TARGET_EXPR:
       {
index 31b32ea05896c4228457819f903de28943f98dc8..9e6b5af327cefa19cd0df12bf52ac09669ea92ab 100644 (file)
@@ -228,7 +228,6 @@ vec_perm_indices::series_p (unsigned int out_base, unsigned int out_step,
 
       out_base += out_step;
     }
-  return true;
 }
 
 /* Return true if all elements of the permutation vector are in the range