diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-05-04 08:43:50 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-05-04 08:43:50 +0200 |
commit | 0d4b9fa4c89b68be32fdec9f49aa14ad53578cb9 (patch) | |
tree | 552be1ac0351f1d61548f4e1859056cb55a9c080 /gcc | |
parent | f6a5ffbfbf3387414b14426d4f41c4e6bc39b6c8 (diff) | |
download | gcc-0d4b9fa4c89b68be32fdec9f49aa14ad53578cb9.zip gcc-0d4b9fa4c89b68be32fdec9f49aa14ad53578cb9.tar.gz gcc-0d4b9fa4c89b68be32fdec9f49aa14ad53578cb9.tar.bz2 |
re PR tree-optimization/27285 (ivopts postgresql miscompilation)
PR tree-optimization/27285
* gcc.c-torture/execute/pr27285.c: New test.
From-SVN: r113516
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pr27285.c | 46 |
2 files changed, 49 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 218a850..119d4bc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-05-04 Jakub Jelinek <jakub@redhat.com> + PR tree-optimization/27285 + * gcc.c-torture/execute/pr27285.c: New test. + PR middle-end/27388 * gcc.dg/gomp/pr27388-1.c: New test. * gcc.dg/gomp/pr27388-2.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/pr27285.c b/gcc/testsuite/gcc.c-torture/execute/pr27285.c new file mode 100644 index 0000000..44a6aaf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr27285.c @@ -0,0 +1,46 @@ +/* PR tree-optimization/27285 */ + +extern void abort (void); + +struct S { unsigned char a, b, c, d[16]; }; + +void __attribute__ ((noinline)) +foo (struct S *x, struct S *y) +{ + int a, b; + unsigned char c, *d, *e; + + b = x->b; + d = x->d; + e = y->d; + a = 0; + while (b) + { + if (b >= 8) + { + c = 0xff; + b -= 8; + } + else + { + c = 0xff << (8 - b); + b = 0; + } + + e[a] = d[a] & c; + a++; + } +} + +int +main (void) +{ + struct S x = { 0, 25, 0, { 0xaa, 0xbb, 0xcc, 0xdd }}; + struct S y = { 0, 0, 0, { 0 }}; + + foo (&x, &y); + if (x.d[0] != y.d[0] || x.d[1] != y.d[1] + || x.d[2] != y.d[2] || (x.d[3] & 0x80) != y.d[3]) + abort (); + return 0; +} |