On 10/16/24 12:20, Peter Zijlstra wrote: > The code as is, is wrong, I don't think we'll ever end up in the dec > case for 'short' unsigned types. Clang is just clever enough to realize > this and issues a warning. Ahhh, that's the key to it. Thanks, Peter. > Something like so might work: > > const int pao_ID__ = __builtin_constant_p(val) ? > ((typeof(var))(val) == 1 ? 1 : > ((typeof(var))(val) == (typeof(var))-1 ? -1 : 0 )) : 0; Would anybody hate if we broke this up a bit, like: const typeof(var) _val = val; const int paoconst = __builtin_constant_p(val); const int paoinc = paoconst && ((_val) == 1); const int paodec = paoconst && ((_val) == (typeof(var))-1); and then did if (paoinc) percpu_unary_op(size, qual, "inc", var); ... Or even: #define PAOINC 1234 const int pao_ID__ = __builtin_constant_p(val) ? ((typeof(var))(val) == 1 ? PAOINC : ... if (PAOINC) percpu_unary_op(size, qual, "inc", var); Since the 1 and -1 ternary results end up just being magic numbers anyway. Otherwise that pao_ID__ expression is pretty gnarly.