I'm trying to compile some C code which makes use of the __thread keyword, to indicate thread-local storage, but on OS X (Mavericks) I get the following error:
./tls.c(6): error #1781: thread-local storage is not supported in this environment
static long __thread x[MAX_SLOTS];
Whilst investigating the error, I've found that although Mach-O object files don't provide a dedicated area for thread-local storage variables (like ELF object files apparently do) other OS X compilers (e.g. clang 5.0 and gcc-4.8) do recognise and compile files containing __thread.
I did find some Intel documentation regarding the __thread keyword, which suggests using the compile argument -gcc-version=XXX, but this just prints out a deprecation warning and still results in the above error. (I tried adding a hyperlink to the page I found, but this triggers the spam filter)
I attach a fairly simple MWE in C99, which creates some threads that access TLS. The pthreads workaround (using pthread_key_create, pthread_setspecific, pthread_getspecific and pthread_key_delete) adds a lot of code bloat that would be desirable to avoid.
Compile command used:-
[compiler] ./tls.c -o tls -std=c99 -Wall
where compiler was one of gcc-4.8, clang or icc