From ffd78b302f00ff445a645d33c895399ddb029420 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 9 Sep 2011 09:06:49 +0000 Subject: [PATCH] re PR middle-end/50333 (internal compiler error: in extract_ops_from_tree, at gimple.h:1909) 2011-09-09 Richard Guenther 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. From-SVN: r178720 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr50333.c | 17 +++++++++++++++++ gcc/tree-data-ref.c | 3 ++- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr50333.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dbda61cef07a..d04c2e94ea3e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-09-09 Richard Guenther + + PR middle-end/50333 + * tree-data-ref.c (split_constant_offset): Do not try to handle + ternary ops. + 2011-09-08 Andrew Stubbs PR tree-optimization/50318 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1d77d7b383d7..f0a53831ca4c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-09-09 Richard Guenther + + PR middle-end/50333 + * gcc.dg/torture/pr50333.c: New testcase. + 2011-09-08 Andrew Stubbs PR tree-optimization/50318 diff --git a/gcc/testsuite/gcc.dg/torture/pr50333.c b/gcc/testsuite/gcc.dg/torture/pr50333.c new file mode 100644 index 000000000000..47577dcccc85 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr50333.c @@ -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); +} diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 388ea8aaeb22..72ecfe9a8c89 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -686,7 +686,8 @@ split_constant_offset (tree exp, tree *var, tree *off) *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); -- 2.47.3