Messages in this thread | | | Date | Tue, 22 Dec 2009 17:26:55 -0800 | From | David Daney <> | Subject | Re: [PATCH] BUG(): CONFIG_BUG=n version of BUG() should be unreachable() |
| |
Alexander Beregalov wrote: > Previouss definition of BUG() as 'do {} while(0)' produced compilation > warnings when BUG() was used in default branch of switch() statement > (control reaches end of non-void function). > > Example: > unsigned long function() > { > switch() { > case 1: > return 1; > case 2: > return 2; > default: > BUG(); > } > > Using unreachable() fixes the problem. > > Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com> >
NAK.
> diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h > index 18c435d..1106439 100644 > --- a/include/asm-generic/bug.h > +++ b/include/asm-generic/bug.h > @@ -89,7 +89,7 @@ extern void warn_slowpath_null(const char *file, const int line); > > #else /* !CONFIG_BUG */ > #ifndef HAVE_ARCH_BUG > -#define BUG() do {} while(0) > +#define BUG() unreachable() > #endif > > #ifndef HAVE_ARCH_BUG_ON
You can only use 'unreachable()' in situations where it is truly unreachable. In the case above you will reach it in the default case.
I would suggest one of the following instead:
#define BUG() BUILD_BUG_ON(1)
#define BUG() do {} while(1)
David Daney
| |