[ECOS] Re: casts to a type other than an integral or enumeration type in a constant-expression

Jonathan Larmour jifl@eCosCentric.com
Thu Feb 13 13:22:00 GMT 2003


Nathan Sidwell wrote:
> Jonathan Larmour wrote:
> 
>>> |>       case (int) SIG_DFL:
> 
> 
>>>
>>> This code is completely bogus anyway, even if it might be valid.  
>>> Casting
>>> a pointer to int is dubious at best and will fail miserably if sizeof
>>> (__sighandler_t) > sizeof (int).
>>
>>
>>
>> Assuming I'm thinking of the right bit of code, Fred was paraphrasing 
>> the code. The "int" is actually an eCos typedef set by the hardware 
>> abstraction layer so _will_ be correct for the hardware.
>>
>> The warning is certainly misleading at best as an int is certainly an 
>> integral type ;-). From a quick read of the C++ standard, I can't see 
>> any problem with this code.
> 
> the problem is SIG_DFL is probably,
>     typedef void (*__sighandler_t) (int);
>     #define SIG_DFL ((__sighandler_t)0)

Indeed it's like that. But the whole thing is cast to an int, so the 
expression as a whole has integral type. From the C++ standard 6.4.2 para 
2 that's all that's required, the way I read it. Having a non-integral 
type in an intermediate stage should make no difference.

Jifl
-- 
eCosCentric    http://www.eCosCentric.com/    The eCos and RedBoot experts
--[ "You can complain because roses have thorns, or you ]--
--[  can rejoice because thorns have roses." -Lincoln   ]-- Opinions==mine


-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss



More information about the Ecos-discuss mailing list