aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2007-04-19 03:35:25 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2007-04-19 01:35:25 +0000
commit8d5d5865293148f8208acdc962beb686a3836720 (patch)
tree8370a872c958fe7ffe9dea21b5735a742db71a92 /gcc
parent06a4a507625bf9a3b979ccb275bf4182f07b8ea2 (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fold-const.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1138a1a..2e2fad3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2007-04-18 Jan Hubicka <jh@suse.cz>
+
+ * fold-const.c (div_if_zero_remainder): Do signed divide for pointer
+ types.
+
2007-04-18 Eric Christopher <echristo@apple.com>
* config/rs6000/darwin.md (load_macho_picbase): Use link register
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);