Tom Lane wrote: "Merlin Moncure" <[EMAIL PROTECTED]> writes: >> All TLS variables *must* be static (or implicitly static >> through extern, i.e. no 'auto' variables)
>I assume you mean static as in not-auto, rather than static as in >not-global. Otherwise we have a problem here. Yes, you are correct. >> and their addresses can not be >> assumed to be constant. >Surely the addresses can be assumed constant within a thread. Otherwise >we have a problem here too. Quoting from the MSDN: The address of a thread local object is not considered constant, and any expression involving such an address is not considered a constant expression. In standard C, the effect of this is to forbid the use of the address of a thread local variable as an initializer for an object or pointer. For example, the following code will be flagged as an error by the C compiler: #define Thread __declspec( thread ) Thread int tls_i; int *p = &tls_i; //This will generate an error in C. <end> (Note this does not apply to C++) >> Taking addresses of TLS variables should be considered illegal, >Sorry, no can accept that restriction. I thought not. I believe if TLS variables are detail managed through the win32 API, some of these problems can be avoided (after all, these examples are for the Microsoft compiler). Merlin ---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend