From: jakub Date: Thu, 4 May 2006 06:43:50 +0000 (+0000) Subject: PR tree-optimization/27285 X-Git-Tag: upstream/4.9.2~54712 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a2b530175db099d04f3be456899898046e1743bc;p=platform%2Fupstream%2Flinaro-gcc.git PR tree-optimization/27285 * gcc.c-torture/execute/pr27285.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113516 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 + 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; +}