Re: pgsql: Replace our hacked version of ax_pthread.m4 with latest upstream
От | Tom Lane |
---|---|
Тема | Re: pgsql: Replace our hacked version of ax_pthread.m4 with latest upstream |
Дата | |
Msg-id | 25767.1437859156@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: pgsql: Replace our hacked version of ax_pthread.m4 with latest upstream (Heikki Linnakangas <hlinnaka@iki.fi>) |
Ответы |
Re: pgsql: Replace our hacked version of ax_pthread.m4
with latest upstream
|
Список | pgsql-committers |
I've located another problem in the new improved ax_pthread.m4 script: prairiedog is now concluding that it should use -pthread, which leads to a whole bunch of build warnings along the lines of powerpc-apple-darwin8-gcc-4.0.1: unrecognized option '-pthread' Previously it concluded that it didn't need any special switch. As near as I can tell, the problem is that this bit of ax_pthread.m4 is backwards: # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], [AC_MSG_RESULT([yes])], [ax_pthread_extra_flags= AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" AFAICS, the only way that ax_pthread_extra_flags ends up containing -Werror is if this compile attempt *succeeds*, which surely ought not happen ever with any compiler; it certainly won't on any of mine. Thus, we never actually apply -Werror and so the subsequent thread-switch testing completely fails to notice if the compiler merely emits warnings. Moreover, this check is logically unsound even if it weren't accidentally backwards, because it cannot distinguish whether the error (if there was one) required -Werror to happen or would have happened anyway. And on top of that, at least with the versions of gcc I have laying about, an unknown or misspelled -p option does not result in nonzero exit status, whether or not you say -Werror: $ touch foo.c $ gcc -pthread -c foo.c $ gcc -pzthread -c foo.c gcc: unrecognized option '-pzthread' gcc: unrecognized option '-pzthread' $ echo $? 0 $ gcc -Werror -pzthread -c foo.c gcc: unrecognized option '-pzthread' gcc: unrecognized option '-pzthread' $ echo $? 0 (same results on gcc 4.0.1 or 4.4.7) Therefore, adding -Werror would fail to produce the desired results in the subsequent thread-flag checks even if the check about whether to add it had been done correctly. I realize this is verbatim from upstream autoconf, but that doesn't mean it's not utterly broken. regards, tom lane
В списке pgsql-committers по дате отправления: