Merge branch 'linux-2.6' into for-linus
[powerpc.git] / include / asm-powerpc / bug.h
index f44b529..978b2c7 100644 (file)
@@ -70,9 +70,10 @@ struct bug_entry *find_bug(unsigned long bugaddr);
                    "i" (__FILE__), "i" (__FUNCTION__));        \
 } while (0)
 
-#define WARN_ON(x) do {                                                \
-       if (__builtin_constant_p(x)) {                          \
-               if (x)                                          \
+#define WARN_ON(x) ({                                          \
+       typeof(x) __ret_warn_on = (x);                          \
+       if (__builtin_constant_p(__ret_warn_on)) {              \
+               if (__ret_warn_on)                              \
                        __WARN();                               \
        } else {                                                \
                __asm__ __volatile__(                           \
@@ -80,11 +81,12 @@ struct bug_entry *find_bug(unsigned long bugaddr);
                ".section __bug_table,\"a\"\n"                  \
                "\t"PPC_LONG"   1b,%1,%2,%3\n"                  \
                ".previous"                                     \
-               : : "r" ((long)(x)),                            \
+               : : "r" (__ret_warn_on),                        \
                    "i" (__LINE__ + BUG_WARNING_TRAP),          \
                    "i" (__FILE__), "i" (__FUNCTION__));        \
        }                                                       \
-} while (0)
+       unlikely(__ret_warn_on);                                \
+})
 
 #define HAVE_ARCH_BUG
 #define HAVE_ARCH_BUG_ON