summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.c-torture')
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20000606-1.c10
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20000728-1.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20000801-1.c39
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20000801-2.c40
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20000819-1.c17
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20000819-1.x2
6 files changed, 124 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/20000606-1.c b/gcc/testsuite/gcc.c-torture/compile/20000606-1.c
new file mode 100644
index 00000000000..93977c0931a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20000606-1.c
@@ -0,0 +1,10 @@
+typedef struct _foo foo;
+extern foo bar;
+struct _foo {
+ int a;
+};
+
+void baz(void)
+{
+ bar.a = 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20000728-1.c b/gcc/testsuite/gcc.c-torture/compile/20000728-1.c
new file mode 100644
index 00000000000..f56d940834e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20000728-1.c
@@ -0,0 +1,16 @@
+struct clock {
+ long sec; long usec;
+};
+
+int foo(void)
+{
+ struct clock clock_old = {0, 0};
+
+ for (;;) {
+ long foo;
+
+ if (foo == clock_old.sec && 0 == clock_old.usec);
+ }
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000801-1.c b/gcc/testsuite/gcc.c-torture/execute/20000801-1.c
new file mode 100644
index 00000000000..1bc386ea252
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20000801-1.c
@@ -0,0 +1,39 @@
+extern void abort(void);
+extern void exit(int);
+
+void
+foo (char *bp, unsigned n)
+{
+ register char c;
+ register char *ep = bp + n;
+ register char *sp;
+
+ while (bp < ep)
+ {
+ sp = bp + 3;
+ c = *sp;
+ *sp = *bp;
+ *bp++ = c;
+ sp = bp + 1;
+ c = *sp;
+ *sp = *bp;
+ *bp++ = c;
+ bp += 2;
+ }
+}
+
+int main(void)
+{
+ int one = 1;
+
+ if (sizeof(int) != 4 * sizeof(char))
+ exit(0);
+
+ foo((char *)&one, sizeof(one));
+ foo((char *)&one, sizeof(one));
+
+ if (one != 1)
+ abort();
+
+ exit(0);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000801-2.c b/gcc/testsuite/gcc.c-torture/execute/20000801-2.c
new file mode 100644
index 00000000000..5bb17b5db5e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20000801-2.c
@@ -0,0 +1,40 @@
+extern void abort(void);
+extern void exit(int);
+int bar(void);
+int baz(void);
+
+struct foo {
+ struct foo *next;
+};
+
+struct foo *test(struct foo *node)
+{
+ while (node) {
+ if (bar() && !baz())
+ break;
+ node = node->next;
+ }
+ return node;
+}
+
+int bar (void)
+{
+ return 0;
+}
+
+int baz (void)
+{
+ return 0;
+}
+
+int main(void)
+{
+ struct foo a, b, *c;
+
+ a.next = &b;
+ b.next = (struct foo *)0;
+ c = test(&a);
+ if (c)
+ abort();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000819-1.c b/gcc/testsuite/gcc.c-torture/execute/20000819-1.c
new file mode 100644
index 00000000000..e1c2769c08d
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20000819-1.c
@@ -0,0 +1,17 @@
+int a[2] = { 2, 0 };
+
+void foo(int *sp, int cnt)
+{
+ int *p, *top;
+
+ top = sp; sp -= cnt;
+
+ for(p = sp; p <= top; p++)
+ if (*p < 2) exit(0);
+}
+
+int main()
+{
+ foo(a + 1, 1);
+ abort();
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000819-1.x b/gcc/testsuite/gcc.c-torture/execute/20000819-1.x
new file mode 100644
index 00000000000..2f397b96e51
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20000819-1.x
@@ -0,0 +1,2 @@
+set torture_execute_xfail "*-*-*"
+return 0