From 55d2e8577e5ae0e7ac0cdbf5201b4836b5d7ad3c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 4 Oct 2022 08:02:03 +0200 Subject: [PATCH] BUILD: h1: silence an initiialized warning with gcc-4.7 and -Os Building h1.c with gcc-4.7 -Os produces the following warning: src/h1.c: In function 'h1_headers_to_hdr_list': src/h1.c:1101:36: warning: 'ptr' may be used uninitialized in this function [-Wmaybe-uninitialized] In fact ptr may be taken from sl.rq.u.ptr which is only initialized after passing through the relevant states, but gcc doesn't know which states are visited. Adding an ALREADY_CHECKED() statement there is sufficient to shut it up and doesn't affect the emitted code. This may be backported to stable versions to make sure that builds on older distros and systems is clean. --- src/h1.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/h1.c b/src/h1.c index 81445cefa4..cce484ca4b 100644 --- a/src/h1.c +++ b/src/h1.c @@ -1013,6 +1013,11 @@ int h1_headers_to_hdr_list(char *start, const char *stop, if (ret < 0) { if (h1m->err_pos < -1) { state = H1_MSG_LAST_LF; + /* WT: gcc seems to see a path where sl.rq.u.ptr was used + * uninitialized, but it doesn't know that the function is + * called with initial states making this impossible. + */ + ALREADY_CHECKED(sl.rq.u.ptr); ptr = ((ret == -1) ? sl.rq.u.ptr : host->ptr); /* Set ptr on the error */ goto http_msg_invalid; }