1#include <pthread.h>
2#include <assert.h>
3#include <stdlib.h>
4
5// This shows that putting a segment pointer into a thread-specific data
6// area and then getting it out again doesn't lose info -- even though the
7// key allocation/getting is done on the real CPU where the skin can't see,
8// the get/set of the info is done using that key on the simd CPU where it
9// can see, so everything works out fine.
10
11int main(void)
12{
13   pthread_key_t key;
14   char *x, *z;
15   char  y;
16
17   x = malloc(100);
18
19   y = x[-1];     // error
20   x[1] = 'z';
21
22   assert( 0 == pthread_key_create ( &key, NULL ) );
23   assert( 0 == pthread_setspecific(  key, x ) );
24   z = (char*)pthread_getspecific( key );
25   assert( 0 != z );
26
27   y = z[-1];     // error
28
29   // ensure the key went in and out correctly
30   assert(z == x);
31   assert(z[1] == 'z');
32
33   return 0;
34}
35