This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Make the pointer parameter to __gthread_setspecific non-const


Richard Guenther wrote:
On Sat, Aug 23, 2008 at 7:14 PM, Aaron W. LaFramboise
<aaronavay62@aaronwl.com> wrote:
Currently on i386-pc-mingw32, casting away constness in
__gthread_setspecific causes a bootstrap failure with --enable-werror. This
must be true for a number of other targets which do the same thing.

The ultimate problem here is that there's nothing about this parameter that
is const: __gthread_getspecific returns a non-const pointer, not a const
one.

But pthread_setspecific _does_ take a constant pointer as argument.

Oh, how unfortunate.


I think this is a defect in POSIX pthreads. This means if you pass in a const void * to pthread_setspecific, you can get a void * back out of pthread_getspecific, losing the constness without ever casting.

Why not add an explicit cast for the mingw32 case?

An explicit cast does not kill the warning. The union trick is the only way to get rid of it, and the encapsulation for this trick, CONST_CAST, is not available to gthr.h.


*-mingw* is not the only target with this issue. Pretty much all non-pthreads targets have to cast away constness in the same way, since most other threading APIs apparently get this right.

So, is it better here to deviate slightly from pthreads, to do what seems more correct, or to use the union trick to make this warning go away in all pthreads targets?

I'm happy either way; someone just let me know what I should do.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]