diff options
author | Richard Guenther <rguenther@suse.de> | 2007-04-21 17:47:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-04-21 17:47:13 +0000 |
commit | 84ece8efd21ed73d98de62e4bcf22b4160cd7faa (patch) | |
tree | 986170b134afaa330f5f7db7761ce3e7b9e0424a /gcc | |
parent | fc52a1446b2ad0a460a8bd207776b5a3739f269f (diff) | |
download | gcc-84ece8efd21ed73d98de62e4bcf22b4160cd7faa.zip gcc-84ece8efd21ed73d98de62e4bcf22b4160cd7faa.tar.gz gcc-84ece8efd21ed73d98de62e4bcf22b4160cd7faa.tar.bz2 |
re PR tree-optimization/31136 (FRE ignores bit-field truncation (C and C++ front-end don't produce bit-field truncation)
2007-04-21 Richard Guenther <rguenther@suse.de>
PR middle-end/31136
* fold-const.c (fold_unary): Call fold_convert_const on the
original tree.
* gcc.c-torture/execute/pr31136.c: New testcase.
From-SVN: r124020
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pr31136.c | 17 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc3d7ab..034936d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-04-21 Richard Guenther <rguenther@suse.de> + + PR middle-end/31136 + * fold-const.c (fold_unary): Call fold_convert_const on the + original tree. + 2007-04-21 Alexandre Oliva <aoliva@redhat.com> * gcse.c (store_killed_in_insn): Handle PARALLELs. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 6d2db7b..4e8f34f 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -7857,7 +7857,7 @@ fold_unary (enum tree_code code, tree type, tree op0) return fold_build1 (BIT_NOT_EXPR, type, fold_convert (type, tem)); } - tem = fold_convert_const (code, type, arg0); + tem = fold_convert_const (code, type, op0); return tem ? tem : NULL_TREE; case VIEW_CONVERT_EXPR: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 00af7d4..3157d85 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-21 Richard Guenther <rguenther@suse.de> + + PR middle-end/31136 + * gcc.c-torture/execute/pr31136.c: New testcase. + 2007-04-21 Alexandre Oliva <aoliva@redhat.com> * gcc.target/i386/movsi-sm-1.c: New. diff --git a/gcc/testsuite/gcc.c-torture/execute/pr31136.c b/gcc/testsuite/gcc.c-torture/execute/pr31136.c new file mode 100644 index 0000000..66c202c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr31136.c @@ -0,0 +1,17 @@ +extern void abort (void); + +struct S { + unsigned b4:4; + unsigned b6:6; +} s; + +int main() +{ + s.b6 = 31; + s.b4 = s.b6; + s.b6 = s.b4; + if (s.b6 != 15) + abort (); + return 0; +} + |