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

Richard Guenther richard.guenther@gmail.com
Sat Aug 23 19:53:00 GMT 2008


On Sat, Aug 23, 2008 at 8:46 PM, Aaron W. LaFramboise
<aaronavay62@aaronwl.com> wrote:
> 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.

An explicit cast kills the warning for me for

void foo(void *);
void bar (const void *p)
{
  foo(p);
}

how is your situation different?

Richard.



More information about the Gcc-patches mailing list