aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-04-27 12:53:40 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-04-27 12:53:40 +0000
commit3db18011e5c9f4060dc9cba1440056b2e0de2c00 (patch)
treeab84de678bfca5ebda7c8d4935546851070f7bbc
parentd4e15523c1fc225a513d1a21e5eb2b953b4c928d (diff)
downloadgcc-3db18011e5c9f4060dc9cba1440056b2e0de2c00.zip
gcc-3db18011e5c9f4060dc9cba1440056b2e0de2c00.tar.gz
gcc-3db18011e5c9f4060dc9cba1440056b2e0de2c00.tar.bz2
tree-cfg.c (verify_expr): Make dead code hit gcc_unreachable.
2018-04-27 Richard Biener <rguenther@suse.de> * tree-cfg.c (verify_expr): Make dead code hit gcc_unreachable. From-SVN: r259705
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/tree-cfg.c90
2 files changed, 25 insertions, 69 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1eff3f4..3ed17c1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2018-04-27 Richard Biener <rguenther@suse.de>
+
+ * tree-cfg.c (verify_expr): Make dead code hit gcc_unreachable.
+
2018-04-27 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (*movti_internal): Substitute Ye constraint
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index c4767a3..34ab248 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3141,18 +3141,7 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
}
case COND_EXPR:
- x = COND_EXPR_COND (t);
- if (!INTEGRAL_TYPE_P (TREE_TYPE (x)))
- {
- error ("non-integral used in condition");
- return x;
- }
- if (!is_gimple_condexpr (x))
- {
- error ("invalid conditional operand");
- return x;
- }
- break;
+ gcc_unreachable ();
case NON_LVALUE_EXPR:
case TRUTH_NOT_EXPR:
@@ -3164,8 +3153,7 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
case NEGATE_EXPR:
case ABS_EXPR:
case BIT_NOT_EXPR:
- CHECK_OP (0, "invalid operand to unary operator");
- break;
+ gcc_unreachable ();
case REALPART_EXPR:
case IMAGPART_EXPR:
@@ -3261,65 +3249,12 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
break;
case PLUS_EXPR:
case MINUS_EXPR:
- /* PLUS_EXPR and MINUS_EXPR don't work on pointers, they should be done using
- POINTER_PLUS_EXPR. */
- if (POINTER_TYPE_P (TREE_TYPE (t)))
- {
- error ("invalid operand to plus/minus, type is a pointer");
- return t;
- }
- CHECK_OP (0, "invalid operand to binary operator");
- CHECK_OP (1, "invalid operand to binary operator");
- break;
+ gcc_unreachable ();
case POINTER_DIFF_EXPR:
- if (!POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (t, 0)))
- || !POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (t, 1))))
- {
- error ("invalid operand to pointer diff, operand is not a pointer");
- return t;
- }
- if (TREE_CODE (TREE_TYPE (t)) != INTEGER_TYPE
- || TYPE_UNSIGNED (TREE_TYPE (t))
- || (TYPE_PRECISION (TREE_TYPE (t))
- != TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (t, 0)))))
- {
- error ("invalid type for pointer diff");
- return t;
- }
- CHECK_OP (0, "invalid operand to pointer diff");
- CHECK_OP (1, "invalid operand to pointer diff");
- break;
+ gcc_unreachable ();
case POINTER_PLUS_EXPR:
- /* Check to make sure the first operand is a pointer or reference type. */
- if (!POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (t, 0))))
- {
- error ("invalid operand to pointer plus, first operand is not a pointer");
- return t;
- }
- /* Check to make sure the second operand is a ptrofftype. */
- if (!ptrofftype_p (TREE_TYPE (TREE_OPERAND (t, 1))))
- {
- error ("invalid operand to pointer plus, second operand is not an "
- "integer type of appropriate width");
- return t;
- }
- /* FALLTHROUGH */
- case LT_EXPR:
- case LE_EXPR:
- case GT_EXPR:
- case GE_EXPR:
- case EQ_EXPR:
- case NE_EXPR:
- case UNORDERED_EXPR:
- case ORDERED_EXPR:
- case UNLT_EXPR:
- case UNLE_EXPR:
- case UNGT_EXPR:
- case UNGE_EXPR:
- case UNEQ_EXPR:
- case LTGT_EXPR:
case MULT_EXPR:
case TRUNC_DIV_EXPR:
case CEIL_DIV_EXPR:
@@ -3340,6 +3275,23 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
case BIT_IOR_EXPR:
case BIT_XOR_EXPR:
case BIT_AND_EXPR:
+ gcc_unreachable ();
+
+ case LT_EXPR:
+ case LE_EXPR:
+ case GT_EXPR:
+ case GE_EXPR:
+ case EQ_EXPR:
+ case NE_EXPR:
+ case UNORDERED_EXPR:
+ case ORDERED_EXPR:
+ case UNLT_EXPR:
+ case UNLE_EXPR:
+ case UNGT_EXPR:
+ case UNGE_EXPR:
+ case UNEQ_EXPR:
+ case LTGT_EXPR:
+ /* Reachable via COND_EXPR condition which is GENERIC. */
CHECK_OP (0, "invalid operand to binary operator");
CHECK_OP (1, "invalid operand to binary operator");
break;