On Tue, May 13, 2025 at 08:40:31PM +0100, David Laight wrote: > On Fri, 9 May 2025 23:34:27 +0300 > Alexey Dobriyan <[email protected]> wrote: > > > Linux's BUG_ON is done backwards (condition is inverted). > > But it is a long story. > > > > However C11/C23 allow to partially transition to what all normal > > programmers are used to, namely assert(). > > > > Deprecate BUILD_BUG_ON, recommend static_assert/_Static_assert. > > And then some day BUG_ON will be flipped as well. > > _Static_assert() is broken by design and only usable for trival tests.
It is not broken by design. I was going to recommend it for "static_assert(sizeof(struct S) == ...)" type of things. For ABI types and similar stuff. BTW BUILD_BUG_ON is broken by design too, there are places with fake functions for a block so that they can put statement in. > clang also output the entire expansion of the conditional (even when > a message is specified) which can lead to very very very very long lines. Oh, that's very unfortunate. > It isn't at all suitable for many of the checks in the kernel. STATIC_ASSERT could be arranged. > Look at the signedness test in min() as an example. The very fact you all made giant mess trying to imitate min<T, U>() should not block progress of using standard (and better!) stuff.

