]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUILD: task: work around a bogus warning in gcc 4.7/4.8 at -O1
authorWilly Tarreau <w@1wt.eu>
Fri, 21 Aug 2020 03:48:34 +0000 (05:48 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 21 Aug 2020 03:54:00 +0000 (05:54 +0200)
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

index c91316cbbac449a8c5145b9aef50ff58defaa3d2..cabfcbe1ec8823c03046448f48a49ae44a9f08a9 100644 (file)
@@ -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);