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@xxxxxxxxx>
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