On Thu, Aug 31, 2017 at 05:10:27PM +0200, Boudewijn Dijkstra wrote:

> Op Thu, 31 Aug 2017 14:08:07 +0200 schreef Otto Moerbeek <o...@drijf.net>:
> > /usr/src/usr.sbin/sasyncd/carp.c:157:12: warning: comparison of
> > unsigned enum expression < 0 is always false [-Wtautological-compare]
> >         if (state < 0 || state > FAIL)
> >             ~~~~~ ^ ~
> > /usr/src/usr.sbin/sasyncd/carp.c:166:20: warning: comparison of
> > unsigned enum expression < 0 is always false [-Wtautological-compare]
> >         if (current_state < 0 || current_state > FAIL) {
> >             ~~~~~~~~~~~~~ ^ ~
> > 
> > this warning is a tiny bit interesting. A compiler is free to choose
> > the type of the enum, as long as it can represent all given values.
> > So another compiler might choose not to make it unsigned. So I came up
> > with this fix that is not depending on the signedness of the type. But
> > most of the time avoiding enum is better, I suppose.
> > 
> >     -Otto
> > 
> > Index: carp.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/sasyncd/carp.c,v
> > retrieving revision 1.15
> > diff -u -p -r1.15 carp.c
> > --- carp.c  27 Aug 2016 04:21:08 -0000      1.15
> > +++ carp.c  31 Aug 2017 12:03:59 -0000
> > @@ -154,7 +154,7 @@ carp_state_name(enum RUNSTATE state)
> >  {
> >     static const char       *carpstate[] = CARPSTATES;
> > -   if (state < 0 || state > FAIL)
> > +   if ((unsigned)state > FAIL)
> >             state = FAIL;
> >     return carpstate[state];
> >  }
> > @@ -163,7 +163,7 @@ void
> >  carp_update_state(enum RUNSTATE current_state)
> >  {
> > -   if (current_state < 0 || current_state > FAIL) {
> > +   if ((unsigned)current_state > FAIL) {
> >             log_err("carp_update_state: invalid carp state, abort");
> >             cfgstate.runstate = FAIL;
> >             return;
> > 
> 
> Doesn't the compiler warn about enum non-member assignment? If it does, then
> checking it would be redundant here, no?

Only in C++, which has stricter rule regarding to enums.

        -Otto

Reply via email to