On Mon, Oct 17, 2022 at 06:17:59PM -0700, Andrew Morton wrote: ... > -#define __clamp(val, lo, hi) \ > +#define __clamp(val, lo, hi) \ > __cmp(__cmp(val, lo, >), hi, <) > > -#define __clamp_once(val, lo, hi, unique_val, unique_lo, unique_hi) ({ \ > - typeof(val) unique_val = (val); \ > - typeof(lo) unique_lo = (lo); \ > - typeof(hi) unique_hi = (hi); \ > +#define __clamp_once(val, lo, hi, unique_val, unique_lo, unique_hi) ({ \ > + typeof(val) unique_val = (val); \ > + typeof(lo) unique_lo = (lo); \ > + typeof(hi) unique_hi = (hi); \ > __clamp(unique_val, unique_lo, unique_hi); }) > > -#define __clamp_input_check(lo, hi) \ > - (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \ > +#define __clamp_input_check(lo, hi) \ > + (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \ > __is_constexpr((lo) > (hi)), (lo) > (hi), false))) These are good... > -#define __careful_clamp(val, lo, hi) ({ \ > - __clamp_input_check(lo, hi) + \ > - __builtin_choose_expr(__typecheck(val, lo) && __typecheck(val, hi) && \ > - __typecheck(hi, lo) && __is_constexpr(val) && \ > - __is_constexpr(lo) && __is_constexpr(hi), \ > - __clamp(val, lo, hi), \ > - __clamp_once(val, lo, hi, __UNIQUE_ID(__val), \ > +#define __careful_clamp(val, lo, hi) ({ \ > + __clamp_input_check(lo, hi) + \ > + __builtin_choose_expr(__typecheck(val, lo) && __typecheck(val, hi) &&\ > + __typecheck(hi, lo) && __is_constexpr(val) &&\ > + __is_constexpr(lo) && __is_constexpr(hi), \ > + __clamp(val, lo, hi), \ > + __clamp_once(val, lo, hi, __UNIQUE_ID(__val), \ > __UNIQUE_ID(__lo), __UNIQUE_ID(__hi))); }) ...but this one becomes less readable. I think checkpatch is always a recommendation than requirement. I would leave at least the last as is, but formally I think the entire patch is a churn to satisfy controversial recommendation. -- With Best Regards, Andy Shevchenko