* John Stultz <john.stu...@linaro.org> wrote:

> As noted in the comment above abs():
>  "abs() should not be used for 64-bit types (s64, u64, long long)
>   - use abs64()  for those."
> 
> Unfortunately, its quite easy to pass 64-bit values to abs()
> accidentally, and the compiler provides no warning when the
> returned value is erroniously capped at 32-bits.
> 
> So this patch tries to make it easier to detect when 64-bit
> values are passed to abs() by generating a build error.
> 
> Obviously, since this causes build errors, this patch is last
> in the series, and I tried to fix up all of the issues I ran
> into in my build testing. But there are likely still some out
> there.
> 
> Cc: Andrew Morton <a...@linux-foundation.org>
> Cc: Ingo Molnar <mi...@kernel.org>
> Cc: "Steven Rostedt (Red Hat)" <rost...@goodmis.org>
> Cc: Peter Zijlstra <pet...@infradead.org>
> Cc: Masami Hiramatsu <masami.hiramatsu...@hitachi.com>
> Cc: Michal Nazarewicz <min...@mina86.com>
> Signed-off-by: John Stultz <john.stu...@linaro.org>
> ---
>  include/linux/kernel.h | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 5582410..6f01151 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -208,6 +208,9 @@ extern int _cond_resched(void);
>   */
>  #define abs(x) ({                                            \
>               long ret;                                       \
> +             compiletime_assert(                             \
> +                     !(sizeof(typeof(x)) > sizeof(long)),    \
> +                     "abs() should not be used for 64-bit types - use 
> abs64()");\
>               if (sizeof(x) == sizeof(long)) {                \
>                       long __x = (x);                         \
>                       ret = (__x < 0) ? -__x : __x;           \

I think this should be a compiletime_warning() - that will be visible enough.

Thanks,

        Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to