summaryrefslogtreecommitdiff
path: root/TSRM
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2017-11-15 12:33:35 +0100
committerAnatol Belski <ab@php.net>2017-11-15 12:44:04 +0100
commit0e5d4ea55554872fe72e5d984b73fc21abc561fe (patch)
treeed57a3474356351cdd5c5d8b6428b581115b4484 /TSRM
parent5b28218cc6114e4bc0e92290cbad7a88ee7c9ddb (diff)
downloadphp-git-0e5d4ea55554872fe72e5d984b73fc21abc561fe.tar.gz
Fix C++ compatibility for TSRM_TLS
If a C++11 source is compiled, thread_local is preferred. Furthermore, at least GCC treats __thread vs. thread_local a different way and under certain circumstances would refuse to compile __thread is a C++11 source. This change is far behind in time, any up-to-date compiler supports C++11 and otherwise it won't take effect on lower versions.
Diffstat (limited to 'TSRM')
-rw-r--r--TSRM/TSRM.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h
index 39d4bcc752..4ecee6311f 100644
--- a/TSRM/TSRM.h
+++ b/TSRM/TSRM.h
@@ -157,10 +157,14 @@ TSRM_API void tsrm_free_interpreter_context(void *context);
TSRM_API void *tsrm_get_ls_cache(void);
TSRM_API uint8_t tsrm_is_main_thread(void);
-#ifdef TSRM_WIN32
-# define TSRM_TLS __declspec(thread)
+#if defined(__cplusplus) && __cplusplus > 199711L
+# define TSRM_TLS thread_local
#else
-# define TSRM_TLS __thread
+# ifdef TSRM_WIN32
+# define TSRM_TLS __declspec(thread)
+# else
+# define TSRM_TLS __thread
+# endif
#endif
#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)