From ba11c17994a5aba402252e4a7d0e5c91cad0aea9 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 28 Jul 1995 09:36:30 -0400 Subject: [PATCH] (pointer_int_sum): Don't distribute if intop is unsigned and not the same size as ptrop. From-SVN: r10186 --- gcc/c-typeck.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 4e41e5fc224..b16a7bfb820 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -2648,7 +2648,13 @@ pointer_int_sum (resultcode, ptrop, intop) && TREE_CONSTANT (size_exp) /* If the constant comes from pointer subtraction, skip this optimization--it would cause an error. */ - && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE) + && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE + /* If the constant is unsigned, and smaller than the pointer size, + then we must skip this optimization. This is because it could cause + an overflow error if the constant is negative but INTOP is not. */ + && (! TREE_UNSIGNED (TREE_TYPE (intop)) + || (TYPE_PRECISION (TREE_TYPE (intop)) + == TYPE_PRECISION (TREE_TYPE (ptrop))))) { enum tree_code subcode = resultcode; tree int_type = TREE_TYPE (intop); -- 2.30.2