bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] cast from pointer to smaller type 'int'


From: Xiao-Yong Jin
Subject: Re: [Bug-apl] cast from pointer to smaller type 'int'
Date: Wed, 20 Sep 2017 15:36:16 -0500

reinterpret_cast works from smaller sizes to larger sizes.

So simply
   reinterpret_cast<uint64_t *>(thread)

should work for both of our machines (size_t is uint64_t for me).

... until some pthread implementation decides to hand you a larger sized struct 
for pthread_t.
   
> On Sep 20, 2017, at 3:26 PM, Juergen Sauermann <address@hidden> wrote:
> 
> Hi Xiao-Yong,
> 
> I can compile this:
> 
>        << reinterpret_cast<uint64_t>(
>           reinterpret_cast<void *>(thread))
> 
> Please let me know if it compiles on you box as well.
> 
> Best Regards,
> Jürgen
> 
> 
> On 09/20/2017 10:00 PM, Juergen Sauermann wrote:
>> Hi Xiao-Yong,
>> 
>> with reinterpret_cast<size_t> I am getting (gcc 4.8)  this:
>> 
>> Thread_context.cc: In member function ‘void 
>> Thread_context::print(std::ostream&) const’:
>> Thread_context.cc:73:42: error: invalid cast from type ‘pthread_t {aka long 
>> unsigned int}’ to type ‘size_t {aka unsigned int}’
>>         << reinterpret_cast<size_t>(thread)
>>                                           ^
>> make[1]: *** [apl-Thread_context.o] Error 1
>> 
>> It seems a little ridiculous to me that replacing a good old C-style cast 
>> that worked fine for the
>> last 10 years cannot be replaced by one of the 3 members of the C++ zoo of 
>> casts in a portable way?
>> 
>> Maybe some intermediate cast to const void * can be done on your machine?
>> 
>> Best Regards,
>> Jürgen
>> 
>> 
>> On 09/19/2017 11:44 PM, Xiao-Yong Jin wrote:
>>> Should have got back to you sooner, but static_cast is not allowed between 
>>> pointer types and non-pointer types.
>>> 
>>> Thread_context.cc:73:11: error: static_cast from 'pthread_t' (aka 
>>> '_opaque_pthread_t *') to 'int' is not allowed
>>>        << static_cast<int>(thread)
>>>           ^~~~~~~~~~~~~~~~~~~~~~~~
>>> 
>>> I need reinterpret_cast<size_t> here.  I cannot reinterpret_cast<int> 
>>> either, because of the difference in size.
>>> 
>>> 
>>>> On Sep 11, 2017, at 3:01 PM, Juergen Sauermann <address@hidden>
>>>>  wrote:
>>>> 
>>>> Hi Xiao-Yong,
>>>> 
>>>> I see. In this particular case the pthread_t is only used to identify a 
>>>> thread and
>>>> to distinguish it from other threads for debugging purposes. So as long as 
>>>> the
>>>> compiler does not complain about the cast everything is fine. Cast to void 
>>>> * instead of
>>>> int would also be an option.
>>>> 
>>>> /// Jürgen
>>>>  
>>>> 
>>>> On 09/11/2017 08:38 PM, Xiao-Yong Jin wrote:
>>>> 
>>>>> I don't think there is a portable way of printing a variable of type 
>>>>> pthread_t.  It could be a struct, depending on the implementation.  
>>>>> static_cast<int> is alright, but may not be useful in the future.
>>>>> 
>>>>> 
>>>>> 
>>>>>> On Sep 11, 2017, at 1:08 PM, Juergen Sauermann <address@hidden>
>>>>>> 
>>>>>>  wrote:
>>>>>> 
>>>>>> Hi Xiao-Yong,
>>>>>> 
>>>>>> thanks, maybe fixed in SVN 1011.
>>>>>> Problem with that error is that the casted type is not a pointer, at 
>>>>>> least on my machine.
>>>>>> 
>>>>>> /// Jürgen
>>>>>> 
>>>>>> 
>>>>>> On 09/11/2017 06:55 PM, Xiao-Yong Jin wrote:
>>>>>> 
>>>>>> 
>>>>>>> At revision 1010
>>>>>>> 
>>>>>>> Thread_context.cc:72:65: error: cast from pointer to smaller type 'int' 
>>>>>>> loses information
>>>>>>>    out << "thread #"     << setw(2) << N << ":" << setw(16)  << 
>>>>>>> int(thread)
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]