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:37:27 -0500

> On Sep 20, 2017, at 3:36 PM, Xiao-Yong Jin <address@hidden> wrote:
> 
> reinterpret_cast works from smaller sizes to larger sizes.
> 
> So simply
>   reinterpret_cast<uint64_t *>(thread)

Sorry, I meant
   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]