From: Jakub Jelinek Date: Thu, 4 May 2006 06:43:50 +0000 (+0200) Subject: re PR tree-optimization/27285 (ivopts postgresql miscompilation) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d4b9fa4c89b68be32fdec9f49aa14ad53578cb9;p=gcc.git re PR tree-optimization/27285 (ivopts postgresql miscompilation) PR tree-optimization/27285 * gcc.c-torture/execute/pr27285.c: New test. From-SVN: r113516 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 218a850be2a..119d4bc0515 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-05-04 Jakub Jelinek + 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 00000000000..44a6aaf0f01 --- /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; +}