aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/tls
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2003-05-16 21:35:43 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2003-05-16 21:35:43 +0200
commitdcac003d6685744f5f95c068b85b051a03567272 (patch)
tree55b43cff94fa644f169e8d48dff2a04d2d619aed /gcc/testsuite/gcc.dg/tls
parent4a0a75dd441da8834907fc7d78634b458f71ce58 (diff)
downloadgcc-dcac003d6685744f5f95c068b85b051a03567272.zip
gcc-dcac003d6685744f5f95c068b85b051a03567272.tar.gz
gcc-dcac003d6685744f5f95c068b85b051a03567272.tar.bz2
backport: re PR target/7434 ([x86_64] ICE in change_address_1, at emit-rtl.c:1934)
Merge from gcc-3_2-rhl8-branch: 2003-04-23 Jakub Jelinek <jakub@redhat.com> * gcc.dg/tls/opt-6.c: New test. 2003-04-05 Jakub Jelinek <jakub@redhat.com> * gcc.dg/20030405-1.c: New test. 2003-03-09 Jakub Jelinek <jakub@redhat.com> * gcc.dg/20030309-1.c: New test. 2003-03-07 Eric Botcazou <ebotcazou@libertysurf.fr> * gcc.c-torture/execute/20030307-1.c: New test. 2003-02-20 Randolph Chung <tausq@debian.org> * gcc.c-torture/compile/20030220-1.c: New test. 2003-02-18 Jakub Jelinek <jakub@redhat.com> * gcc.dg/20030217-1.c: New test. 2003-01-29 Jakub Jelinek <jakub@redhat.com> * gcc.c-torture/compile/20020129-1.c: New test. 2002-12-21 Eric Botcazou <ebotcazou@libertysurf.fr> * gcc.dg/unroll-1.c: New test. 2002-11-16 Jan Hubicka <jh@suse.cz> * gcc.c-torture/execute/20020920-1.c: New test. 2002-10-08 Jakub Jelinek <jakub@redhat.com> PR target/7434 * gcc.c-torture/compile/20021008-1.c: New test. 2002-08-10 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com> PR target/7559 * testsuite/gcc.c-torture/execute/20020810-1.c: New test. 2002-08-07 Jakub Jelinek <jakub@redhat.com> * gcc.c-torture/compile/20020807-1.c: New test. 2002-07-30 Jakub Jelinek <jakub@redhat.com> * gcc.dg/tls/opt-1.c: New test. 2002-07-29 Jakub Jelinek <jakub@redhat.com> * gcc.dg/20020729-1.c: New test. 2002-07-20 Jakub Jelinek <jakub@redhat.com> * g++.dg/opt/life1.C: New test. 2002-05-20 Jakub Jelinek <jakub@redhat.com> * gcc.dg/20020525-1.c: New test. 2002-05-24 Jakub Jelinek <jakub@redhat.com> PR c++/6794 * g++.dg/ext/pretty1.C: New test. * g++.dg/ext/pretty2.C: New test. From-SVN: r66877
Diffstat (limited to 'gcc/testsuite/gcc.dg/tls')
-rw-r--r--gcc/testsuite/gcc.dg/tls/opt-1.c28
-rw-r--r--gcc/testsuite/gcc.dg/tls/opt-6.c70
2 files changed, 98 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/tls/opt-1.c b/gcc/testsuite/gcc.dg/tls/opt-1.c
new file mode 100644
index 0000000..8523c76
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tls/opt-1.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fPIC" } */
+/* { dg-options "-O2 -fPIC -mtune=i686" { target i?86-*-* } } */
+
+extern __thread int thr;
+
+static int x;
+
+static void
+bar (void)
+{
+ x = 1;
+}
+
+static void
+#ifdef __i386__
+__attribute__ ((regparm (3)))
+#endif
+foo (const char *x, void *y, int *z)
+{
+ bar ();
+}
+
+void
+test (const char *x, void *y)
+{
+ foo (x, y, &thr);
+}
diff --git a/gcc/testsuite/gcc.dg/tls/opt-6.c b/gcc/testsuite/gcc.dg/tls/opt-6.c
new file mode 100644
index 0000000..de04c1c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tls/opt-6.c
@@ -0,0 +1,70 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+extern void exit (int);
+
+struct A
+{
+ char a;
+ int b;
+ long long c;
+};
+extern __thread struct A a1, a2, a3, a4;
+extern struct A *f1a (void);
+extern struct A *f2a (void);
+extern struct A *f3a (void);
+extern struct A *f4a (void);
+extern struct A *f5a (void);
+extern struct A *f6a (void);
+extern struct A *f7a (void);
+extern struct A *f8a (void);
+extern struct A *f9a (void);
+extern struct A *f10a (void);
+extern int f1b (void);
+extern int f2b (void);
+extern int f3b (void);
+extern int f4b (void);
+extern int f5b (void);
+extern int f6b (void);
+extern int f7b (void);
+extern int f8b (void);
+extern int f9b (void);
+extern int f10b (void);
+extern void check1 (void);
+extern void check2 (void);
+__thread int dummy = 12;
+__thread struct A local = { 1, 2, 3 };
+
+int
+main (void)
+{
+ struct A *p;
+
+ if (local.a != 1 || local.b != 2 || local.c != 3)
+ abort ();
+ if (a1.a != 4 || a1.b != 5 || a1.c != 6)
+ abort ();
+ if (a2.a != 22 || a2.b != 23 || a2.c != 24)
+ abort ();
+ if (a3.a != 10 || a3.b != 11 || a3.c != 12)
+ abort ();
+ if (a4.a != 25 || a4.b != 26 || a4.c != 27)
+ abort ();
+ check1 ();
+ check2 ();
+ if (f1a () != &a1 || f2a () != &a2 || f3a () != &a3 || f4a () != &a4)
+ abort ();
+ p = f5a (); if (p->a != 16 || p->b != 16 + 1 || p->c != 16 + 2)
+ abort ();
+ p = f6a (); if (p->a != 19 || p->b != 19 + 1 || p->c != 19 + 2)
+ abort ();
+ if (f7a () != &a2 || f8a () != &a4)
+ abort ();
+ p = f9a (); if (p->a != 28 || p->b != 28 + 1 || p->c != 28 + 2)
+ abort ();
+ p = f10a (); if (p->a != 31 || p->b != 31 + 1 || p->c != 31 + 2)
+ abort ();
+
+ exit (0);
+}