http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50982
--- Comment #29 from David Edelsohn <dje at gcc dot gnu.org> 2011-11-05 14:11:35 UTC --- The patch in comment 24 solves some of the problem. Thanks! The error now is: In file included from /farm/dje/src/src/libstdc++-v3/src/atomic.cc:28:0: /tmp/20111104/powerpc-ibm-aix5.3.0.0/pthread/libstdc++-v3/include/mutex:763:30: error: array must be initialized with a brace-enclosed initializer /tmp/20111104/powerpc-ibm-aix5.3.0.0/pthread/libstdc++-v3/include/mutex:763:30: error: too many initializers for 'std::once_flag::__native_type {aka pthread_once_t}' /tmp/20111104/powerpc-ibm-aix5.3.0.0/pthread/libstdc++-v3/include/mutex: In function 'void std::call_once(std::once_flag&, _Callable&&, _Args&& ...)': /tmp/20111104/powerpc-ibm-aix5.3.0.0/pthread/libstdc++-v3/include/mutex:818:64: error: invalid conversion from 'void (*)(...)' to 'void (*)()' [-fpermissive] On AIX pthread_once_t is a struct containing an array: typedef struct { #ifdef __64BIT__ long __on_word[9]; #else int __on_word[28]; #endif /* __64BIT__ */ } pthread_once_t; and the initializer is an array: #ifdef __64BIT__ #define PTHREAD_ONCE_INIT \ { \ 0, \ 0, \ 0, \ 0, \ 0, \ _PTH_FLAGS_INIT64, \ 0 \ } #else #define PTHREAD_ONCE_INIT \ { \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 2, \ 0 \ } #endif /* __64BIT__ */ The initializer has few words than the array because the rest are zero, but matching the size does not solve the problem. I also do not understand the conversion error: extern int pthread_once (pthread_once_t *, void (*)(void)) ; static inline int __gthread_once (__gthread_once_t *__once, void (*__func) (void)) { if (__gthread_active_p ()) return pthread_once (__once, __func); else return -1; } int __e = __gthread_once(&(__once._M_once), &__once_proxy); I will upload the new atomic.ii Thanks for your help.