tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: changing KASSERT()'s definition for non-diag kernels

On Sun, 20 Oct 2013, matthew green wrote:
as part of the GCC 4.8 preparation work, we're seeing many new warnings where variables are only used inside KASSERT(), but the non-diag kernel builds trigger errors.

my solution, rather than marking these variables with __USE(), is to change KASSERT() into a real function that consumes its arguments, but is still an empty function.

That seems sensible to me. More generally, a lot of our exiting macros can be rewritten as static inline functions, now that we require a C99 compiler.

note that there is a re-direction to force the input to KASSERT() to be an integer type, as it is called with all sorts of types of input (pointers, values, boolean expressions..)

The KASSERT macro can be invoked with anything that has a truth value as its first argument. Casting that to int seems reasonable, but perhaps using (!!(e)) to convert any type to a truth value would be clearer and less likely to trigger compiler warnings about casting non-numeric types to int.

--apb (Alan Barrett)

Home | Main Index | Thread Index | Old Index