Messages in this thread | | | Date | Thu, 24 Sep 2015 17:26:59 +0300 | Subject | Re: + kernelh-make-abs-work-with-64-bit-types.patch added to -mm tree | From | Alexey Dobriyan <> |
| |
On Thu, Sep 24, 2015 at 4:32 PM, Michal Nazarewicz <mina86@mina86.com> wrote: > On Wed, Sep 23 2015, Alexey Dobriyan wrote: >> I've sent kabs() before which didn't go in because it didn't work for >> INT_MAX et al >> (don't worry, this abs() doens't as well) but it is nicer that this >> version in other aspects >> (hopefully). >> >> [PATCH v2] Add kabs() >> http://marc.info/?l=linux-kernel&m=133518745522740&w=4 > > Perhaps: > > + (void)(_x))))))); \ > > instead of: > > + _x)))))); \ > > at the end. Since kabs makes no sense for unsigned types it’s best to > fail with compile-time error than to let user think that the call is > actually doing something.
I thought so, but the amount of uses like
unsigned int = abs(unsigned int - unsigned int)
is non trivial. With a few exceptions it is about 170 on x86_64 allmodconfig. Most of them are correct because abs() casts to signed first. So if you want to expose such uses, then you are forced to write
unsigned int = kabs((int)(unsigned int - unsigned int));
Don't know if it's a good thing.
> Also, you don’t need ({ … }) around the ‘_x < 0 ? -_x : _x’ expression, > do you?
Seems so, thank you for noticing.
| |