diff options
author | Jan Hubicka <jh@suse.cz> | 2007-04-19 03:35:25 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2007-04-19 01:35:25 +0000 |
commit | 8d5d5865293148f8208acdc962beb686a3836720 (patch) | |
tree | 8370a872c958fe7ffe9dea21b5735a742db71a92 /gcc/fold-const.c | |
parent | 06a4a507625bf9a3b979ccb275bf4182f07b8ea2 (diff) | |
download | gcc-8d5d5865293148f8208acdc962beb686a3836720.zip gcc-8d5d5865293148f8208acdc962beb686a3836720.tar.gz gcc-8d5d5865293148f8208acdc962beb686a3836720.tar.bz2 |
fold-const.c (div_if_zero_remainder): Do signed divide for pointer types.
* fold-const.c (div_if_zero_remainder): Do signed divide for pointer
types.
From-SVN: r123966
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 857065f..b0a2bb7 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -890,6 +890,17 @@ div_if_zero_remainder (enum tree_code code, tree arg1, tree arg2) int1l = TREE_INT_CST_LOW (arg1); int1h = TREE_INT_CST_HIGH (arg1); + /* &obj[0] + -128 really should be compiled as &obj[-8] rahter than + &obj[some_exotic_number]. */ + if (POINTER_TYPE_P (type)) + { + uns = false; + type = signed_type_for (type); + fit_double_type (int1l, int1h, &int1l, &int1h, + type); + } + else + fit_double_type (int1l, int1h, &int1l, &int1h, type); int2l = TREE_INT_CST_LOW (arg2); int2h = TREE_INT_CST_HIGH (arg2); |