diff options
author | Richard Biener <rguenther@suse.de> | 2017-03-27 12:52:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-03-27 12:52:13 +0000 |
commit | 819df7815634caf606a3d212ca4cba6a93acafd0 (patch) | |
tree | 9d4df3e07041d8ee0dcfec096fad6a9660058f31 /gcc | |
parent | e5dcff3eb55dcccf1ad20d94c0f5680f75f3b75c (diff) | |
download | gcc-819df7815634caf606a3d212ca4cba6a93acafd0.zip gcc-819df7815634caf606a3d212ca4cba6a93acafd0.tar.gz gcc-819df7815634caf606a3d212ca4cba6a93acafd0.tar.bz2 |
re PR tree-optimization/80181 (ICE in set_lattice_value, at tree-ssa-ccp.c:505)
2017-03-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/80181
* tree-ssa-ccp.c (likely_value): UNDEFINED ^ X is UNDEFINED.
* gcc.dg/torture/pr80181.c: New testcase.
From-SVN: r246500
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr80181.c | 19 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 4 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6296cdd..600d264 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-03-27 Richard Biener <rguenther@suse.de> + + PR tree-optimization/80181 + * tree-ssa-ccp.c (likely_value): UNDEFINED ^ X is UNDEFINED. + 2017-03-27 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/predicates.md (move_double_src_operand): Replace the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 184ccdb..bc302a8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-03-27 Richard Biener <rguenther@suse.de> + + PR tree-optimization/80181 + * gcc.dg/torture/pr80181.c: New testcase. + 2017-03-27 Claudiu Zissulescu <claziss@synopsys.com> * testsuite/gcc.target/arc/interrupt-4.c: New file. diff --git a/gcc/testsuite/gcc.dg/torture/pr80181.c b/gcc/testsuite/gcc.dg/torture/pr80181.c new file mode 100644 index 0000000..896ca4f --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr80181.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ + +int +nr (void) +{ +} + +void +it (int dl) +{ + int vp = 0; + + for (;;) + { + dl = vp ^ nr (); + dl ^= vp; + vp = 1; + } +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index cd23824..023018c 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -741,9 +741,11 @@ likely_value (gimple *stmt) case PLUS_EXPR: case MINUS_EXPR: case POINTER_PLUS_EXPR: + case BIT_XOR_EXPR: /* Not MIN_EXPR, MAX_EXPR. One VARYING operand may be selected. Not bitwise operators, one VARYING operand may specify the - result completely. Not logical operators for the same reason. + result completely. + Not logical operators for the same reason, apart from XOR. Not COMPLEX_EXPR as one VARYING operand makes the result partly not UNDEFINED. Not *DIV_EXPR, comparisons and shifts because the undefined operand may be promoted. */ |