From 7d318ed8cc28f068c29309504f8dc6b2681addd8 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 8 Jun 2022 12:14:23 +0200 Subject: [PATCH] BUILD: compiler: implement unreachable for older compilers too Benoit Dolez reported that gcc-4.4 emits several "may be used uninitialized" warnings around places where there are BUG_ON() or ABORT_NOW(). The reason is that __builtin_unreachable() was introduced in gcc-4.5 thus older ones do not know that the code after such statements is not reachable. This patch solves the problem by deplacing the statement with an infinite loop on older versions. The compiler knows that the code following it cannot be reached, and this is quite cheap (2 to 4 bytes depending on architectures). It even reduces the code size a little bit as the compiler doesn't have to optimize for branches that do not exist. This may be backported to older versions. --- include/haproxy/compiler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/haproxy/compiler.h b/include/haproxy/compiler.h index a935ac3b5..66b5f5835 100644 --- a/include/haproxy/compiler.h +++ b/include/haproxy/compiler.h @@ -126,7 +126,7 @@ #if defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) #define my_unreachable() __builtin_unreachable() #else -#define my_unreachable() +#define my_unreachable() do { } while (1) #endif #endif