autosprintf.h include breaks with -std=c++(98|0x) and -Wall -Werror

Bug #916755 reported by Chow Loong Jin on 2012-01-15
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gettext
New
Undecided
Unassigned
gettext (Ubuntu)
Undecided
Unassigned

Bug Description

In Oneiric, the following piece of code:
-----8<-----
#include <autosprintf.h>
int main() {return 0;}
----->8-----

compiled with:
$ g++ -std=c++98 -Wall -Werror foo.cc

yields the following warnings (which got turned into errors):
-----8<-----
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:118:1: error: ‘int __gthrw_pthread_once(pthread_once_t*, void (*)())’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:119:1: error: ‘void* __gthrw_pthread_getspecific(pthread_key_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:120:1: error: ‘int __gthrw_pthread_setspecific(pthread_key_t, const void*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:122:1: error: ‘int __gthrw_pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:123:1: error: ‘int __gthrw_pthread_join(pthread_t, void**)’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:124:1: error: ‘int __gthrw_pthread_equal(pthread_t, pthread_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:125:1: error: ‘pthread_t __gthrw_pthread_self() throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:126:1: error: ‘int __gthrw_pthread_detach(pthread_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:128:1: error: ‘int __gthrw_pthread_cancel(pthread_t)’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:130:1: error: ‘int __gthrw_sched_yield() throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:132:1: error: ‘int __gthrw_pthread_mutex_lock(pthread_mutex_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:133:1: error: ‘int __gthrw_pthread_mutex_trylock(pthread_mutex_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:136:1: error: ‘int __gthrw_pthread_mutex_timedlock(pthread_mutex_t*, const timespec*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:139:1: error: ‘int __gthrw_pthread_mutex_unlock(pthread_mutex_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:140:1: error: ‘int __gthrw_pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:141:1: error: ‘int __gthrw_pthread_mutex_destroy(pthread_mutex_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:143:1: error: ‘int __gthrw_pthread_cond_broadcast(pthread_cond_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:144:1: error: ‘int __gthrw_pthread_cond_signal(pthread_cond_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:145:1: error: ‘int __gthrw_pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*)’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:146:1: error: ‘int __gthrw_pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, const timespec*)’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:147:1: error: ‘int __gthrw_pthread_cond_destroy(pthread_cond_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:150:1: error: ‘int __gthrw_pthread_key_create(pthread_key_t*, void (*)(void*)) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:151:1: error: ‘int __gthrw_pthread_key_delete(pthread_key_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:152:1: error: ‘int __gthrw_pthread_mutexattr_init(pthread_mutexattr_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:153:1: error: ‘int __gthrw_pthread_mutexattr_settype(pthread_mutexattr_t*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:154:1: error: ‘int __gthrw_pthread_mutexattr_destroy(pthread_mutexattr_t*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
cc1plus: all warnings being treated as errors
----->8-----

A quick workaround is:
-----8<-----
--- foo.cc 2012-01-15 20:33:04.514366708 +0800
+++ foo.new.cc 2012-01-15 20:35:37.518592500 +0800
@@ -1,2 +1,4 @@
+#include <iostream>
+#include <string>
 #include <autosprintf.h>
 int main () {return 0;}
----->8-----

As for why it's happening: autosprintf.h has the following snippet of code which breaks __attribute__ which is used internally by libstdc++.
-----8<-----
#ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
# define __attribute__(Spec) /* empty */
# endif
/* The __-protected variants of `format' and `printf' attributes
   are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
# define __format__ format
# define __printf__ printf
# endif
#endif
----->8-----

Chow Loong Jin (hyperair) wrote :

Interestingly, this does not affect Precise, only Oneiric. libstdc++ was probably fixed there.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers