Linux: Fix AFS_NORETURN violation with osi_AssertFailK
authorAnders Kaseorg <andersk@mit.edu>
Sat, 6 Nov 2010 07:03:19 +0000 (03:03 -0400)
committerDerrick Brashear <shadow@dementia.org>
Mon, 13 Dec 2010 23:53:01 +0000 (15:53 -0800)
Commit d86f0c44d3c5910a6b54895484dc0286eac9bc73 changed the
AFS_LINUX26_ENV implementation of osi_AssertFailK so that it returns,
contradicting its AFS_NORETURN prototype, in an effort to make the
following BUG() display the right line number.  To fix this, move the
returning implementation into its only caller, the osi_Assert macro.

This fixes possible compiler misoptimizations due to

rx_kcommon.c:255:1: warning: ‘noreturn’ function does return

Change-Id: Ibbcc630037002ce4659e2e6a36b39d271f9bdc58
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Reviewed-on: http://gerrit.openafs.org/3276
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/rx/rx_kcommon.c
src/rx/rx_prototypes.h

index c63b8b3..e335308 100644 (file)
@@ -247,12 +247,6 @@ osi_AssertFailK(const char *expr, const char *file, int line)
 
     osi_Panic("%s", buf);
 }
-#else
-void
-osi_AssertFailK(const char *expr, const char *file, int line)
-{
-    printk(KERN_CRIT "assertion failed: %s, file: %s, line: %d\n", expr, file, line);
-}
 #endif
 
 #ifndef UKERNEL
index 8d9e736..21eada6 100644 (file)
@@ -377,7 +377,7 @@ extern osi_socket rxi_GetHostUDPSocket(u_int host, u_short port);
 # define osi_Panic(msg...) do { printk(KERN_CRIT "openafs: " msg); BUG(); } while (0)
 # undef osi_Assert
 # define osi_Assert(expr) \
-    do { if (!(expr)) { osi_AssertFailK(#expr, __FILE__, __LINE__); BUG(); } } while (0)
+    do { if (!(expr)) osi_Panic("assertion failed: %s, file: %s, line: %d\n", #expr, __FILE__, __LINE__); } while (0)
 # elif defined(AFS_AIX_ENV)
 extern void osi_Panic(char *fmt, void *a1, void *a2, void *a3);
 # else
@@ -403,7 +403,9 @@ extern int rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host,
 # ifdef UKERNEL
 extern void *rx_ServerProc(void *);
 # endif
+# ifndef AFS_LINUX26_ENV
 extern void osi_AssertFailK(const char *expr, const char *file, int line) AFS_NORETURN;
+# endif
 extern void rxk_ListenerProc(void);
 extern void rxk_Listener(void);
 # ifndef UKERNEL