aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-03-25 23:55:15 +0000
committerJeff Law <law@gcc.gnu.org>1999-03-25 16:55:15 -0700
commit9f29bdb0f841f4ceca80c19a7ed0797fe411f3eb (patch)
tree19641352916e51ebe37063399b5c95140f955a13
parent08dc830e4f7a946edb34a7ab6582425c1c900194 (diff)
downloadgcc-9f29bdb0f841f4ceca80c19a7ed0797fe411f3eb.zip
gcc-9f29bdb0f841f4ceca80c19a7ed0797fe411f3eb.tar.gz
gcc-9f29bdb0f841f4ceca80c19a7ed0797fe411f3eb.tar.bz2
* gcc.c-torture/execute/990326-1.c: New test from Charles Hannum.
From-SVN: r25990
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/990326-1.c392
2 files changed, 396 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 86ef152..ade3278 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+Fri Mar 26 00:50:46 1999 Jeffrey A Law (law@cygnus.com)
+
+ * gcc.c-torture/execute/990326-1.c: New test from Charles Hannum.
+
1999-03-26 Craig Burley <craig@jcb-sc.com>
* g77.f-torture/execute/19990325-0.f: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/990326-1.c b/gcc/testsuite/gcc.c-torture/execute/990326-1.c
new file mode 100644
index 0000000..1b8e5d8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/990326-1.c
@@ -0,0 +1,392 @@
+struct a {
+ char a, b;
+ short c;
+};
+
+int
+a1()
+{
+ static struct a x = { 1, 2, ~1 }, y = { 65, 2, ~2 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+a2()
+{
+ static struct a x = { 1, 66, ~1 }, y = { 1, 2, ~2 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+a3()
+{
+ static struct a x = { 9, 66, ~1 }, y = { 33, 18, ~2 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+struct b {
+ int c;
+ short b, a;
+};
+
+int
+b1()
+{
+ static struct b x = { ~1, 2, 1 }, y = { ~2, 2, 65 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+b2()
+{
+ static struct b x = { ~1, 66, 1 }, y = { ~2, 2, 1 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+b3()
+{
+ static struct b x = { ~1, 66, 9 }, y = { ~2, 18, 33 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+struct c {
+ unsigned int c:4, b:14, a:14;
+};
+
+int
+c1()
+{
+ static struct c x = { ~1, 2, 1 }, y = { ~2, 2, 65 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+c2()
+{
+ static struct c x = { ~1, 66, 1 }, y = { ~2, 2, 1 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+c3()
+{
+ static struct c x = { ~1, 66, 9 }, y = { ~2, 18, 33 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+struct d {
+ unsigned int a:14, b:14, c:4;
+};
+
+int
+d1()
+{
+ static struct d x = { 1, 2, ~1 }, y = { 65, 2, ~2 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+d2()
+{
+ static struct d x = { 1, 66, ~1 }, y = { 1, 2, ~2 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+d3()
+{
+ static struct d x = { 9, 66, ~1 }, y = { 33, 18, ~2 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+struct e {
+ int c:4, b:14, a:14;
+};
+
+int
+e1()
+{
+ static struct e x = { ~1, -2, -65 }, y = { ~2, -2, -1 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+e2()
+{
+ static struct e x = { ~1, -2, -1 }, y = { ~2, -66, -1 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+e3()
+{
+ static struct e x = { ~1, -18, -33 }, y = { ~2, -66, -9 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+struct f {
+ int a:14, b:14, c:4;
+};
+
+int
+f1()
+{
+ static struct f x = { -65, -2, ~1 }, y = { -1, -2, ~2 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+f2()
+{
+ static struct f x = { -1, -2, ~1 }, y = { -1, -66, ~2 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+f3()
+{
+ static struct f x = { -33, -18, ~1 }, y = { -9, -66, ~2 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+struct gx {
+ int c:4, b:14, a:14;
+};
+struct gy {
+ int b:14, a:14, c:4;
+};
+
+int
+g1()
+{
+ static struct gx x = { ~1, -2, -65 };
+ static struct gy y = { -2, -1, ~2 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+g2()
+{
+ static struct gx x = { ~1, -2, -1 };
+ static struct gy y = { -66, -1, ~2 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+g3()
+{
+ static struct gx x = { ~1, -18, -33 };
+ static struct gy y = { -66, -9, ~2 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+int
+g4()
+{
+ static struct gx x = { ~1, 0x0020, 0x0010 };
+ static struct gy y = { 0x0200, 0x0100, ~2 };
+
+ return ((x.a & 0x00f0) == (y.a & 0x0f00) &&
+ (x.b & 0x00f0) == (y.b & 0x0f00));
+}
+
+int
+g5()
+{
+ static struct gx x = { ~1, 0x0200, 0x0100 };
+ static struct gy y = { 0x0020, 0x0010, ~2 };
+
+ return ((x.a & 0x0f00) == (y.a & 0x00f0) &&
+ (x.b & 0x0f00) == (y.b & 0x00f0));
+}
+
+int
+g6()
+{
+ static struct gx x = { ~1, 0xfe20, 0xfd10 };
+ static struct gy y = { 0xc22f, 0xc11f, ~2 };
+
+ return ((x.a & 0x03ff) == (y.a & 0x3ff0) &&
+ (x.b & 0x03ff) == (y.b & 0x3ff0));
+}
+
+int
+g7()
+{
+ static struct gx x = { ~1, 0xc22f, 0xc11f };
+ static struct gy y = { 0xfe20, 0xfd10, ~2 };
+
+ return ((x.a & 0x3ff0) == (y.a & 0x03ff) &&
+ (x.b & 0x3ff0) == (y.b & 0x03ff));
+}
+
+struct hx {
+ int a:14, b:14, c:4;
+};
+struct hy {
+ int c:4, a:14, b:14;
+};
+
+int
+h1()
+{
+ static struct hx x = { -65, -2, ~1 };
+ static struct hy y = { ~2, -1, -2 };
+
+ return (x.a == (y.a & ~64) && x.b == y.b);
+}
+
+int
+h2()
+{
+ static struct hx x = { -1, -2, ~1 };
+ static struct hy y = { ~2, -1, -66 };
+
+ return (x.a == y.a && (x.b & ~64) == y.b);
+}
+
+int
+h3()
+{
+ static struct hx x = { -33, -18, ~1 };
+ static struct hy y = { ~2, -9, -66 };
+
+ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
+}
+
+int
+h4()
+{
+ static struct hx x = { 0x0010, 0x0020, ~1 };
+ static struct hy y = { ~2, 0x0100, 0x0200 };
+
+ return ((x.a & 0x00f0) == (y.a & 0x0f00) &&
+ (x.b & 0x00f0) == (y.b & 0x0f00));
+}
+
+int
+h5()
+{
+ static struct hx x = { 0x0100, 0x0200, ~1 };
+ static struct hy y = { ~2, 0x0010, 0x0020 };
+
+ return ((x.a & 0x0f00) == (y.a & 0x00f0) &&
+ (x.b & 0x0f00) == (y.b & 0x00f0));
+}
+
+int
+h6()
+{
+ static struct hx x = { 0xfd10, 0xfe20, ~1 };
+ static struct hy y = { ~2, 0xc11f, 0xc22f };
+
+ return ((x.a & 0x03ff) == (y.a & 0x3ff0) &&
+ (x.b & 0x03ff) == (y.b & 0x3ff0));
+}
+
+int
+h7()
+{
+ static struct hx x = { 0xc11f, 0xc22f, ~1 };
+ static struct hy y = { ~2, 0xfd10, 0xfe20 };
+
+ return ((x.a & 0x3ff0) == (y.a & 0x03ff) &&
+ (x.b & 0x3ff0) == (y.b & 0x03ff));
+}
+
+struct foo {
+ int junk; /* this is to force alignment */
+ unsigned char w, x, y, z;
+};
+
+int
+main()
+{
+ if (!a1 ())
+ abort ();
+ if (!a2 ())
+ abort ();
+ if (!a3 ())
+ abort ();
+ if (!b1 ())
+ abort ();
+ if (!b2 ())
+ abort ();
+ if (!b3 ())
+ abort ();
+ if (!c1 ())
+ abort ();
+ if (!c2 ())
+ abort ();
+ if (!c3 ())
+ abort ();
+ if (!d1 ())
+ abort ();
+ if (!d2 ())
+ abort ();
+ if (!d3 ())
+ abort ();
+ if (!e1 ())
+ abort ();
+ if (!e2 ())
+ abort ();
+ if (!e3 ())
+ abort ();
+ if (!f1 ())
+ abort ();
+ if (!f2 ())
+ abort ();
+ if (!f3 ())
+ abort ();
+ if (!g1 ())
+ abort ();
+ if (!g2 ())
+ abort ();
+ if (!g3 ())
+ abort ();
+ if (g4 ())
+ abort ();
+ if (g5 ())
+ abort ();
+ if (!g6 ())
+ abort ();
+ if (!g7 ())
+ abort ();
+ if (!h1 ())
+ abort ();
+ if (!h2 ())
+ abort ();
+ if (!h3 ())
+ abort ();
+ if (h4 ())
+ abort ();
+ if (h5 ())
+ abort ();
+ if (!h6 ())
+ abort ();
+ if (!h7 ())
+ abort ();
+ exit (0);
+}