Fixed NIM_THREADVAR definition in nimbase.h

This commit is contained in:
Anatoly Galiulin 2016-03-01 17:23:10 +06:00
commit 1a1710c3ec

View file

@ -91,10 +91,25 @@ __clang__
# define NIM_CONST const # define NIM_CONST const
#endif #endif
#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) /*
NIM_THREADVAR declaration based on
http://stackoverflow.com/questions/18298280/how-to-declare-a-variable-as-thread-local-portably
*/
#if __STDC_VERSION__ >= 201112 && !defined __STDC_NO_THREADS__
# define NIM_THREADVAR _Thread_local
#elif defined _WIN32 && ( \
defined _MSC_VER || \
defined __ICL || \
defined __DMC__ || \
defined __BORLANDC__ )
# define NIM_THREADVAR __declspec(thread) # define NIM_THREADVAR __declspec(thread)
#else /* note that ICC (linux) and Clang are covered by __GNUC__ */
#elif defined __GNUC__ || \
defined __SUNPRO_C || \
defined __xlC__
# define NIM_THREADVAR __thread # define NIM_THREADVAR __thread
#else
# error "Cannot define NIM_THREADVAR"
#endif #endif
/* --------------- how int64 constants should be declared: ----------- */ /* --------------- how int64 constants should be declared: ----------- */