|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3 of 6] x86/mm: Another couple of comparisons of unsigned vars with < 0
At 15:19 +0100 on 05 Apr (1333639188), Jan Beulich wrote:
> >>> On 05.04.12 at 16:08, Tim Deegan <tim@xxxxxxx> wrote:
> > At 14:31 +0100 on 05 Apr (1333636297), Jan Beulich wrote:
> >> >>> On 05.04.12 at 14:07, Tim Deegan <tim@xxxxxxx> wrote:
> >> > x86/mm: Another couple of comparisons of unsigned vars with < 0.
> >> >
> >> > Adding the explicit (unsigned) casts in case enums ever end up signed.
> >>
> >> Ugly, but unavoidable if range comparisons are done on enums (which
> >> is what ought to get fixed instead imo).
> >
> > Any suggestions for how? Turn the array access into a case statement?
> > That's even uglier IMO.
>
> switch (<enum-var>) {
> case <low> ... <high>:
> break;
> default:
> <bad>;
> }
Hmm. I really prefer the cast to that.
In both these cases, I could replace this idiom:
static const array a = { val_x, val_y, val_z };
if ( (unsigned) e >= enum_z ) return -EINVAL;
val = a[e];
with
switch (e) {
case enum_x: val = val_x; break;
case enum_x: val = val_x; break;
case enum_x: val = val_x; break;
default: return -EINVAL;
}
but unless it's laid out like this (one line per case) it'll get ugly too.
Switching to #defines is a bit tricky as they're in a public header and
I'm not confident we wouldn't break someone else's compile.
> doesn't look that bad. But when wanting to do range comparisons,
> an enum may not be the best choice anyway (for the very reason of
> it possible being signed, and signed array indexes generally being
> less efficient than unsigned ones), and hence using #define-s and
> an "unsigned int" variable might be the better way.
>
> Otoh, doesn't clang have a command line option to control whether
> enums are signed or unsigned? I think gcc does.
The only gcc flag I can find is -fshort-enums, for making enums into
shorter types.
Cheers,
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |