Subject: Re: switch to two-argument KASSERT?
To: None <>
From: Matt Thomas <>
List: tech-kern
Date: 01/14/2004 00:30:10
On Jan 13, 2004, at 10:13 PM, Daniel Carosone wrote:

> On Tue, Jan 13, 2004 at 11:04:58PM -0600, David Young wrote:
>> I believe that FreeBSD defines the macro like this,
>> #define KASSERT(cond, complaint) if (!(cond)) panic complaint

It's missing a wrapping do { } while (0)

> As already noted elsewhere, I support this - but I'd suggest we use
> something slightly different for the macro definition.

I'd suggest having a KASSERT2(cond, complaint) and then KASSERT could be
#define KASSERT(cond)  KASSERT2(cond, ("assertion failure: " #cond))

> Specifically, I'd like to still see the asserted condition embedded in
> the message. It saves having to dive into the source to find the
> message string, rather than dive in looking for the assertion test as
> now, just to get a basic interpretation. It also helps the message
> text be simpler and more useful it supplements rather than
> "translates" the test - otherwise you can wind up with two
> obviously-equivalent forms of the same obscure condition.

I disagree.  I often want to format the string quite different than
the condition string to more informative.

> Assertion messages are for a developer audience (and only enabled if
> DIAGNOSTIC, right?) so they don't need to be too user-friendly by
> hiding the condition code.

But they shouldn't complete obtuse either.
Matt Thomas                     email:
3am Software Foundry              www:
Cupertino, CA              disclaimer: I avow all knowledge of this