From 6ce0232a78cf6f94d82a6614317689523877b286 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 21 Aug 2020 05:48:34 +0200 Subject: [PATCH] BUILD: task: work around a bogus warning in gcc 4.7/4.8 at -O1 As reported in issue #816, when building task.o at -O1 with gcc 4.7 or 4.8, we get the following warning: CC src/task.o In file included from include/haproxy/proxy.h:31:0, from include/haproxy/cfgparse.h:27, from src/task.c:19: src/task.c: In function 'next_timer_expiry': include/haproxy/ticks.h:121:10: warning: 'key' may be used uninitialized in this function [-Wmaybe-uninitialized] src/task.c:349:2: note: 'key' was declared here It is wrong since the condition to use 'key' is exactly the same as the one used to set it. This warning disappears at -O2 and disappeared from gcc 5 and above. Let's just initialize 'key' there, it only adds 16 bytes of code and remains cheap enough for this function. This should be backported to 2.2. --- src/task.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/task.c b/src/task.c index c91316c..cabfcbe 100644 --- a/src/task.c +++ b/src/task.c @@ -346,7 +346,7 @@ int next_timer_expiry() struct task_per_thread * const tt = sched; // thread's tasks struct eb32_node *eb; int ret = TICK_ETERNITY; - __decl_thread(int key); + __decl_thread(int key = TICK_ETERNITY); /* first check in the thread-local timers */ eb = eb32_lookup_ge(&tt->timers, now_ms - TIMER_LOOK_BACK); -- 1.7.10.4