From 1519144f83925d82117f31ce0872f77660f197ee Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sat, 6 Nov 2010 03:03:19 -0400 Subject: [PATCH] Linux: Fix AFS_NORETURN violation with osi_AssertFailK MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-on: http://gerrit.openafs.org/3276 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Marc Dionne Reviewed-by: Derrick Brashear --- src/rx/rx_kcommon.c | 6 ------ src/rx/rx_prototypes.h | 4 +++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index c63b8b3..e335308 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -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 diff --git a/src/rx/rx_prototypes.h b/src/rx/rx_prototypes.h index 8d9e736..21eada6 100644 --- a/src/rx/rx_prototypes.h +++ b/src/rx/rx_prototypes.h @@ -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 -- 1.9.4