This fixes PR50333, another instance of a extract_ops_from_tree user that doesn't handle ternaries.
Bootstrap and testing pending on x86_64-unknown-linux-gnu. Richard. 2011-09-09 Richard Guenther <rguent...@suse.de> PR middle-end/50333 * tree-data-ref.c (split_constant_offset): Do not try to handle ternary ops. * gcc.dg/torture/pr50333.c: New testcase. Index: gcc/tree-data-ref.c =================================================================== --- gcc/tree-data-ref.c (revision 178719) +++ gcc/tree-data-ref.c (working copy) @@ -686,7 +686,8 @@ split_constant_offset (tree exp, tree *v *off = ssize_int (0); STRIP_NOPS (exp); - if (tree_is_chrec (exp)) + if (tree_is_chrec (exp) + || get_gimple_rhs_class (TREE_CODE (exp)) == GIMPLE_TERNARY_RHS) return; otype = TREE_TYPE (exp); Index: gcc/testsuite/gcc.dg/torture/pr50333.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr50333.c (revision 0) +++ gcc/testsuite/gcc.dg/torture/pr50333.c (revision 0) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ + +static inline void +unext(unsigned int *_ui, unsigned _len, unsigned int _ui0) +{ + unsigned j = 1; + while (++j<_len) + ; + _ui[j-1]=_ui0; +} +unsigned int +ncwrs_urow(unsigned _n, unsigned _k, unsigned int *_u) +{ + unsigned k; + for(k=2; k<_n; k++) + unext(_u+1,_k+1,1); +}