aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-05-04 08:43:50 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2006-05-04 08:43:50 +0200
commit0d4b9fa4c89b68be32fdec9f49aa14ad53578cb9 (patch)
tree552be1ac0351f1d61548f4e1859056cb55a9c080 /gcc
parentf6a5ffbfbf3387414b14426d4f41c4e6bc39b6c8 (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr27285.c46
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;
+}