diff options
author | Richard Guenther <rguenther@suse.de> | 2009-05-26 11:38:03 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-05-26 11:38:03 +0000 |
commit | 3d62b8954fa7186367425da751f8d8626077f09d (patch) | |
tree | 15cb292cd7fb736c9b1d1d89ddd72bc52e8b7efb /gcc | |
parent | 2eb25c98ab88d63e27089a920f3fbd6fc485cd9e (diff) | |
download | gcc-3d62b8954fa7186367425da751f8d8626077f09d.zip gcc-3d62b8954fa7186367425da751f8d8626077f09d.tar.gz gcc-3d62b8954fa7186367425da751f8d8626077f09d.tar.bz2 |
re PR middle-end/40252 (Internal compiler error on samba4 (verify_gimple failed))
2009-05-26 Richard Guenther <rguenther@suse.de>
PR middle-end/40252
* fold-const.c (fold_binary): Use the correct types for building
rotates.
* gcc.c-torture/compile/pr40252.c: New testcase.
From-SVN: r147867
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 28 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr40252.c | 6 |
4 files changed, 35 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c8f9c84..d2b0362 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2009-05-26 Richard Guenther <rguenther@suse.de> + PR middle-end/40252 + * fold-const.c (fold_binary): Use the correct types for building + rotates. + +2009-05-26 Richard Guenther <rguenther@suse.de> + * tree-vect-data-refs.c (vect_create_data_ref_ptr): Remove redundant calls to merge_alias_info. (bump_vector_ptr): Likewise. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index e322ecb..03f6805 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -10175,8 +10175,12 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) && TREE_INT_CST_HIGH (tree11) == 0 && ((TREE_INT_CST_LOW (tree01) + TREE_INT_CST_LOW (tree11)) == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg0, 0))))) - return build2 (LROTATE_EXPR, type, TREE_OPERAND (arg0, 0), - code0 == LSHIFT_EXPR ? tree01 : tree11); + return fold_convert (type, + build2 (LROTATE_EXPR, + TREE_TYPE (TREE_OPERAND (arg0, 0)), + TREE_OPERAND (arg0, 0), + code0 == LSHIFT_EXPR + ? tree01 : tree11)); else if (code11 == MINUS_EXPR) { tree tree110, tree111; @@ -10190,10 +10194,12 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) (TREE_TYPE (TREE_OPERAND (arg0, 0)))) && operand_equal_p (tree01, tree111, 0)) - return build2 ((code0 == LSHIFT_EXPR - ? LROTATE_EXPR - : RROTATE_EXPR), - type, TREE_OPERAND (arg0, 0), tree01); + return fold_convert (type, + build2 ((code0 == LSHIFT_EXPR + ? LROTATE_EXPR + : RROTATE_EXPR), + TREE_TYPE (TREE_OPERAND (arg0, 0)), + TREE_OPERAND (arg0, 0), tree01)); } else if (code01 == MINUS_EXPR) { @@ -10208,10 +10214,12 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) (TREE_TYPE (TREE_OPERAND (arg0, 0)))) && operand_equal_p (tree11, tree011, 0)) - return build2 ((code0 != LSHIFT_EXPR - ? LROTATE_EXPR - : RROTATE_EXPR), - type, TREE_OPERAND (arg0, 0), tree11); + return fold_convert (type, + build2 ((code0 != LSHIFT_EXPR + ? LROTATE_EXPR + : RROTATE_EXPR), + TREE_TYPE (TREE_OPERAND (arg0, 0)), + TREE_OPERAND (arg0, 0), tree11)); } } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dd806ec..7e01ad2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-26 Richard Guenther <rguenther@suse.de> + + PR middle-end/40252 + * gcc.c-torture/compile/pr40252.c: New testcase. + 2009-05-26 Dodji Seketeli <dodji@redhat.com> PR c++/40007 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40252.c b/gcc/testsuite/gcc.c-torture/compile/pr40252.c new file mode 100644 index 0000000..f58e799 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr40252.c @@ -0,0 +1,6 @@ +typedef unsigned int uint32_t; +static void IP(uint32_t v[2]) +{ + v[0] = ((v[0] << 1) | ((v[0] >> 31) & 1L)) & 0xffffffffL; +} + |