This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos 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: Re: casts to a type other than an integral or enumerationtype in a constant-expression


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


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