PR tree-optimization/27285
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 May 2006 06:43:50 +0000 (06:43 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 May 2006 06:43:50 +0000 (06:43 +0000)
* 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

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr27285.c [new file with mode: 0644]

index 218a850..119d4bc 100644 (file)
@@ -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 (file)
index 0000000..44a6aaf
--- /dev/null
@@ -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;
+}