diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2013-01-02 19:43:07 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2013-01-02 19:43:07 +0000 |
commit | e0c06fdd7fe06b52ccfadb3822243e0cc43aeae2 (patch) | |
tree | f44243bc53c6466c7ef07d8475ca5a4005b8d779 | |
parent | e78167f298583c1770b2889cc49a2b31dd42c137 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c | 48 |
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; +} |