We should maybe try using -Werror=ignored-attributes in the test, or just prefer the first one.
On Oct 25, 2012, at 14:44, Siarhei Siamashka <siarhei.siamas...@gmail.com> wrote: > On Mon, 13 Feb 2012 16:16:30 -0800 > Jeremy Huddleston <jerem...@apple.com> wrote: > >> From: Jeremy Huddleston <jerem...@apple.com> >> Date: Sat, 11 Feb 2012 00:44:38 -0800 >> Subject: [PATCH 2/2] Expand TLS support beyond __thread to >> __declspec(thread) >> >> Also prefer initial-exec if available. This code was pretty much >> coppied from a similar commit that I made to xorg-server in April. >> >> cf: xorg/xserver: bb4d145bd25e2aee988b100ecf1105ea3b6a40b8 >> >> Signed-off-by: Jeremy Huddleston <jerem...@apple.com> > > This commit seems to cause troubles for clang in linux. > Running pixman configure with clang-3.1 prefers the use > of __declspec(thread) for TLS: > > checking for gettimeofday... yes > checking sys/time.h usability... yes > checking sys/time.h presence... yes > checking for sys/time.h... yes > checking for thread local storage (TLS) support... __declspec(thread) > > And config.log contains: > > configure:13722: checking for thread local storage (TLS) support > configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing > -fvisibility=hidden conftest.c >&5 > configure:13750: $? = 0 > configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing > -fvisibility=hidden conftest.c >&5 > configure:13750: $? = 0 > configure:13758: result: __declspec(thread) > > So clang seems to accept both __thread and __declspec(thread) but > selects the latter because it is the last in the list. > > > For the current clang svn (soon to be clang-3.2) we get a bit different > result in config.log: > > configure:13722: checking for thread local storage (TLS) support > configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing > -fvisibility=hidden conftest.c >&5 > configure:13750: $? = 0 > configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing > -fvisibility=hidden conftest.c >&5 > conftest.c:45:16: warning: __declspec attribute 'thread' is not supported > [-Wignored-attributes] > int __declspec(thread) test; > ^ > 1 warning generated. > configure:13750: $? = 0 > configure:13758: result: __declspec(thread) > > Here clang-3.2 produces a warning about __declspec(thread), but does not > fail compilation. Which results in __declspec(thread) also being > selected for TLS. > > > A simple test demonstrates that __declspec(thread) does not work > correctly in clang: > > /************************************/ > #include <pthread.h> > #include <unistd.h> > #include <assert.h> > > int __declspec(thread) a = 0; > > void *thread_func(void * arg) > { > a++; > sleep(1); > assert(a == 1); > return NULL; > } > > int main(void) > { > pthread_t thread1, thread2; > pthread_create(&thread1, NULL, thread_func, NULL); > pthread_create(&thread2, NULL, thread_func, NULL); > pthread_join(thread1, NULL); > pthread_join(thread2, NULL); > return 0; > } > /************************************/ > > On a positive side, looks like clang-3.2 is going to be able to pass > pixman test suite successfully. > > I would suggest to just change the order of checks for > __declspec(thread) and __thread in configure.ac > > -- > Best regards, > Siarhei Siamashka _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman