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

Jonathan Larmour jifl@eCosCentric.com
Wed Feb 12 23:59:00 GMT 2003


Andreas Schwab wrote:
> Fred Fish <fnf@public.ninemoons.com> writes:
> 
> |> The latest eCos sources no longer build with the latest gcc.  The
> |> problem can be tracked down to C++ code like the following in eCos:
> |> 
> |>   #include <signal.h>
> |> 
> |>   void foo (__sighandler_t __sighdl)
> |>   {
> |>     switch ((int) __sighdl)
> |>       {
> |>       case (int) SIG_DFL:
> |>         ;
> |>       case (int) SIG_IGN:
> |>         ;
> |>       }
> |>   }
> 
> 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.

I will change the eCos code to use if/else instead because I'd rather it 
was compatible with the release of gcc since that isn't going to start 
working for a while. But you gcc folks can fix the problem anyway :-).

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



More information about the Gcc-bugs mailing list