aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2021-06-05 19:03:06 -0700
committerAndrew Pinski <apinski@marvell.com>2021-06-18 00:58:18 -0700
commit2f1686ff70b25fceb04ca2ffc0a450fb682913ef (patch)
tree3f59db825745ac968c5e93b3de50f6cc6a46301d
parent2786064d91f46cbdb35a543a883155a3982b9478 (diff)
downloadgcc-2f1686ff70b25fceb04ca2ffc0a450fb682913ef.zip
gcc-2f1686ff70b25fceb04ca2ffc0a450fb682913ef.tar.gz
gcc-2f1686ff70b25fceb04ca2ffc0a450fb682913ef.tar.bz2
Disallow pointer and offset types on some gimple
While debugging PR 100925, I found that the gimple verifiers don't reject NEGATE on pointer or offset type. This patch adds the check on some unary and binary gimple which should not have operated on pointer/offset types. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. Thanks, Andrew Pinski gcc/ChangeLog: * tree-cfg.c (verify_gimple_assign_unary): Reject point and offset types on NEGATE_EXPR, ABS_EXPR, BIT_NOT_EXPR, PAREN_EXPR and CNONJ_EXPR. (verify_gimple_assign_binary): Reject point and offset types on MULT_EXPR, MULT_HIGHPART_EXPR, TRUNC_DIV_EXPR, CEIL_DIV_EXPR, FLOOR_DIV_EXPR, ROUND_DIV_EXPR, TRUNC_MOD_EXPR, CEIL_MOD_EXPR, FLOOR_MOD_EXPR, ROUND_MOD_EXPR, RDIV_EXPR, and EXACT_DIV_EXPR.
-rw-r--r--gcc/tree-cfg.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 4c32f83..f126d2a 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3752,6 +3752,15 @@ verify_gimple_assign_unary (gassign *stmt)
case BIT_NOT_EXPR:
case PAREN_EXPR:
case CONJ_EXPR:
+ /* Disallow pointer and offset types for many of the unary gimple. */
+ if (POINTER_TYPE_P (lhs_type)
+ || TREE_CODE (lhs_type) == OFFSET_TYPE)
+ {
+ error ("invalid types for %qs", code_name);
+ debug_generic_expr (lhs_type);
+ debug_generic_expr (rhs1_type);
+ return true;
+ }
break;
case ABSU_EXPR:
@@ -4127,6 +4136,19 @@ verify_gimple_assign_binary (gassign *stmt)
case ROUND_MOD_EXPR:
case RDIV_EXPR:
case EXACT_DIV_EXPR:
+ /* Disallow pointer and offset types for many of the binary gimple. */
+ if (POINTER_TYPE_P (lhs_type)
+ || TREE_CODE (lhs_type) == OFFSET_TYPE)
+ {
+ error ("invalid types for %qs", code_name);
+ debug_generic_expr (lhs_type);
+ debug_generic_expr (rhs1_type);
+ debug_generic_expr (rhs2_type);
+ return true;
+ }
+ /* Continue with generic binary expression handling. */
+ break;
+
case MIN_EXPR:
case MAX_EXPR:
case BIT_IOR_EXPR: