From: Willy Tarreau Date: Fri, 21 Aug 2020 03:48:34 +0000 (+0200) Subject: BUILD: task: work around a bogus warning in gcc 4.7/4.8 at -O1 X-Git-Tag: v2.3-dev4~80 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ce0232a78cf6f94d82a6614317689523877b286;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/task.c b/src/task.c index c91316cbba..cabfcbe1ec 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);