aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-10-07 14:32:20 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-10-07 14:32:20 +0000
commit65dcb9012117bf260ab72b9703e659685e9877e4 (patch)
treee9b5f1aa96b4525117c2725ade79dac2761fefd4 /gcc/tree-cfg.c
parent7427ba36d54d467d0a9ed24dfcf536d29ecd9859 (diff)
downloadgcc-65dcb9012117bf260ab72b9703e659685e9877e4.zip
gcc-65dcb9012117bf260ab72b9703e659685e9877e4.tar.gz
gcc-65dcb9012117bf260ab72b9703e659685e9877e4.tar.bz2
re PR middle-end/45869 (type mismatch in shift expression produces ice with -O3 and -m32)
2010-10-07 Richard Guenther <rguenther@suse.de> PR middle-end/45869 * tree-cfg.c (verify_gimple_assign_binary): Allow vector shifts of pointers. * gcc.dg/torture/pr45869.c: New testcase. From-SVN: r165113
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index cf67fb8..d1ee63a3 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3422,6 +3422,7 @@ verify_gimple_assign_binary (gimple stmt)
{
if (TREE_CODE (rhs1_type) != VECTOR_TYPE
|| !(INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
+ || POINTER_TYPE_P (TREE_TYPE (rhs1_type))
|| FIXED_POINT_TYPE_P (TREE_TYPE (rhs1_type))
|| SCALAR_FLOAT_TYPE_P (TREE_TYPE (rhs1_type)))
|| (!INTEGRAL_TYPE_P (rhs2_type)
@@ -3435,9 +3436,9 @@ verify_gimple_assign_binary (gimple stmt)
debug_generic_expr (rhs2_type);
return true;
}
- /* For shifting a vector of floating point components we
+ /* For shifting a vector of non-integral components we
only allow shifting by a constant multiple of the element size. */
- if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (rhs1_type))
+ if (!INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
&& (TREE_CODE (rhs2) != INTEGER_CST
|| !div_if_zero_remainder (EXACT_DIV_EXPR, rhs2,
TYPE_SIZE (TREE_TYPE (rhs1_type)))))