diff options
author | Richard Guenther <rguenther@suse.de> | 2010-10-07 14:32:20 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-10-07 14:32:20 +0000 |
commit | 65dcb9012117bf260ab72b9703e659685e9877e4 (patch) | |
tree | e9b5f1aa96b4525117c2725ade79dac2761fefd4 /gcc/tree-cfg.c | |
parent | 7427ba36d54d467d0a9ed24dfcf536d29ecd9859 (diff) | |
download | gcc-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.c | 5 |
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))))) |