aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2013-01-02 19:43:07 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2013-01-02 19:43:07 +0000
commite0c06fdd7fe06b52ccfadb3822243e0cc43aeae2 (patch)
treef44243bc53c6466c7ef07d8475ca5a4005b8d779
parente78167f298583c1770b2889cc49a2b31dd42c137 (diff)
downloadgcc-e0c06fdd7fe06b52ccfadb3822243e0cc43aeae2.zip
gcc-e0c06fdd7fe06b52ccfadb3822243e0cc43aeae2.tar.gz
gcc-e0c06fdd7fe06b52ccfadb3822243e0cc43aeae2.tar.bz2
tls-reload-1.c: New test.
gcc/testsuite/ * gcc.dg/torture/tls/tls-reload-1.c: New test. From-SVN: r194815
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c48
2 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index faa12fd..d5ec024 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2013-01-02 Richard Sandiford <rdsandiford@googlemail.com>
+ * gcc.dg/torture/tls/tls-reload-1.c: New test.
+
+2013-01-02 Richard Sandiford <rdsandiford@googlemail.com>
+
* gcc.dg/torture/fp-int-convert-2.c: New test.
2013-01-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
diff --git a/gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c b/gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c
new file mode 100644
index 0000000..464a651
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c
@@ -0,0 +1,48 @@
+/* { dg-do run } */
+/* { dg-require-effective-target tls_runtime } */
+
+#define ARRAY(X) X##_array
+#define DECLARE(X) \
+ __thread int X; \
+ __thread int ARRAY(X)[4]; \
+ int *volatile *__attribute__((noinline)) \
+ check##X (int *volatile *y) \
+ { \
+ if (!y || *y++ != &X || *y++ != &ARRAY(X)[3]) \
+ return 0; \
+ return y; \
+ }
+#define COPY(X) *y++ = &X; *y++ = &ARRAY(X)[3];
+#define CHECK(X) y = check##X (y);
+#define A(M, X) M(X##0) M(X##1) M(X##2) M(X##3) M(X##4) M(X##5) M(X##6) M(X##7)
+#define B(M, X) A(M, X##0) A(M, X##1) A(M, X##2)
+#define C(M, X) B(M, X) B(M, X) B(M, X)
+
+#define NM 2
+#define NA (NM * 8)
+#define NB (NA * 3)
+#define NC (NB * 3)
+
+extern void abort (void);
+
+B(DECLARE, tls)
+
+void __attribute__ ((noinline))
+setup (int *volatile *y)
+{
+ C(COPY, tls)
+}
+
+int
+main (void)
+{
+ int *volatile array[NC];
+ int *volatile *y = array;
+ int i;
+
+ setup (array);
+ B(CHECK, tls);
+ if (!y)
+ abort ();
+ return 0;
+}