From: Johannes Berg <johannes@sipsolutions.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Arjan van de Ven <arjan@infradead.org>,
linux-kernel@vger.kernel.org, mingo@elte.hu
Subject: Re: [patch 13/17] Use WARN() in drivers/base/
Date: Sat, 12 Jul 2008 01:10:36 +0200 [thread overview]
Message-ID: <1215817836.10052.2.camel@johannes.berg> (raw)
In-Reply-To: <20080711151110.ab2b5401.akpm@linux-foundation.org>
[-- Attachment #1: Type: text/plain, Size: 1234 bytes --]
> I don't suppose there's any way of tricking the preprocessor into
> supporting
>
> WARN_ON(foo == 42);
>
> as well as
>
> WARN_ON(foo == 42, "bite me!");
Here's one that abuses variadic macros and limits the number of
arguments to 19.
#include <stdarg.h>
#include <stdio.h>
#define cnt(y...) _cnt( , ## y)
#define _cnt(y...) __cnt(y,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define __cnt(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,n,ys...) n
static void warn_on_slowpath(int argcount, ...)
{
va_list args;
char *fmt;
// print beginning of warning
if (argcount) {
va_start(args, count);
fmt = va_arg(args, char *);
vprintf(fmt, args);
va_end(args);
}
// print rest of warning
}
#define WARN_ON(test, fmt...) \
do { \
if (test) { \
warn_on_slowpath(cnt(fmt) , ## fmt); \
printf("WARN\n"); \
} \
} while (0)
int main(void)
{
WARN_ON(1);
WARN_ON(1, "asdf %d\n", 7);
return 0;
}
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2008-07-11 23:11 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-08 16:38 [patch 0/17] Series to introduce WARN()... a WARN_ON() variant that takes printk arguments Arjan van de Ven
2008-07-08 16:39 ` [patch 1/17] Clear the WARN() namespace Arjan van de Ven
2008-07-11 19:19 ` Andrew Morton
2008-07-08 16:40 ` [patch 2/17] Add a WARN() macro that acts like WARN_ON()+printk Arjan van de Ven
2008-07-08 18:00 ` Joe Perches
2008-07-08 18:18 ` Arjan van de Ven
2008-07-11 19:19 ` Andrew Morton
2008-07-11 20:51 ` Arjan van de Ven
2008-07-08 16:41 ` [patch 3/17] Introduce WARN() usage in the kobject code Arjan van de Ven
2008-07-08 16:42 ` [patch 4/17] Use WARN() in kernel/irq/manage.c Arjan van de Ven
2008-07-08 16:45 ` [patch 5/17] Use WARN() in kernel/panic.c Arjan van de Ven
2008-07-08 16:46 ` [patch 6/17] Use WARN() in mm/vmalloc.c Arjan van de Ven
2008-07-08 16:47 ` [patch 7/17] use WARN() in kernel/lockdep.c Arjan van de Ven
2008-07-08 16:48 ` [patch 8/17] use WARN() in kernel/irq/chip.c Arjan van de Ven
2008-07-08 16:50 ` [patch 9/17] Use WARN() in arch/x86/mm/ioremap.c Arjan van de Ven
2008-07-08 16:51 ` [patch 10/17] use WARN() in arch/x86/mm/pageattr.c Arjan van de Ven
2008-07-08 16:51 ` [patch 11/17] Use WARN() in arch/x86/kernel Arjan van de Ven
2008-07-08 16:52 ` [patch 12/17] Use WARN() in block/ Arjan van de Ven
2008-07-08 16:53 ` [patch 13/17] Use WARN() in drivers/base/ Arjan van de Ven
2008-07-11 19:20 ` Andrew Morton
2008-07-11 20:54 ` Arjan van de Ven
2008-07-11 22:11 ` Andrew Morton
2008-07-11 22:35 ` Arjan van de Ven
2008-07-11 22:51 ` Arjan van de Ven
2008-07-11 23:02 ` Andrew Morton
2008-07-11 23:56 ` Arjan van de Ven
2008-07-11 23:10 ` Johannes Berg [this message]
2008-07-12 0:51 ` Johannes Berg
2008-07-08 16:53 ` [patch 14/17] Use WARN() in lib/ Arjan van de Ven
2008-07-08 16:54 ` [patch 15/17] Use WARN() in fs/ Arjan van de Ven
2008-07-08 16:54 ` Arjan van de Ven
2008-07-08 16:55 ` Arjan van de Ven
2008-07-08 16:56 ` [patch 16/17] Usr WARN() in fs/sysfs Arjan van de Ven
2008-07-08 16:57 ` [patch 17/17] Use WARN() in fs/proc/ Arjan van de Ven
2008-07-09 10:13 ` [patch 0/17] Series to introduce WARN()... a WARN_ON() variant that takes printk arguments Ingo Molnar
2008-07-09 11:19 ` Andrew Morton
2008-07-09 11:37 ` Ingo Molnar
2008-07-09 11:46 ` Andrew Morton
2008-07-09 12:13 ` Ingo Molnar
2008-07-09 13:31 ` Arjan van de Ven
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1215817836.10052.2.camel@johannes.berg \
--to=johannes@sipsolutions.net \
--cc=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®