Thread
Commits
-
Silence uninitialized variable warning with some compiler versions
- f29299c42b0b 19 (unreleased) landed
-
pg_regress: Include diffs in TAP output
- 5720ae014364 19 (unreleased) cited
-
Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
m.litsarev@postgrespro.ru — 2026-06-11T15:08:13Z
Hi, hackers! I found warning while compiling the code (introduced in 5720ae01436480c1dcdd34ece0c3d83b00844bca) with the folloing message postgres/build/../src/test/regress/pg_regress.c: In function ‘results_differ’: postgres/build/../src/test/regress/pg_regress.c:1577:17: warning: ‘startpos’ may be used uninitialized in this function [-Wmaybe-uninitialized] 1577 | fseek(difffile, startpos, SEEK_SET); gcc (Ubuntu 11.5.0-10ubuntu1~22~ppa1) 11.5.0 ldd (Ubuntu GLIBC 2.35-0ubuntu3.13) 2.35 ./configure --enable-debug --enable-cassert --enable-depend --enable-tap-tests --enable-nls --with-perl --with-icu --with-libxml --with-libxslt --with-gssapi --with-openssl --with-zstd --with-lz4 --with-ldap --with-python --prefix=$PGINSTDIR --with-pgport=$PGPORT CFLAGS="-ggdb -Og -g3 -fno-omit-frame-pointer -fvisibility=default -Wno-clobbered" It definitely seems false-positive from semantical point of view, but to keep compiler silent I attached a small patch which fixes it. Respectfully, Mikhail Litsarev, PostgresPro
-
Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
m.litsarev@postgrespro.ru — 2026-06-11T15:09:56Z
The patch attached
-
Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
Ewan Young <kdbase.hack@gmail.com> — 2026-06-12T01:53:43Z
Hi Mikhail, On Thu, Jun 11, 2026 at 11:10 PM <m.litsarev@postgrespro.ru> wrote: > > The patch attached Thanks for the report and patch. I looked at the data flow and agree this is a false positive. startpos is assigned at the ftell() call inside the first if (difffile) block, and the only way to reach the use at fseek() with difffile != NULL is for that same block to have executed (since difffile is reassigned by the fopen(..., "r") at the end of it). I should note I couldn't reproduce the warning here: with gcc 12.2 it stays silent at every optimization level, including -Og. The fix looks correct to me. The raw diff looks large, but it's almost entirely re-indentation — git diff -w shows the actual change is just moving the braces to nest the read block inside the first one. For the record, the minimal alternative would be long startpos = 0; at the declaration, which is a one-line diff. I'd lean toward your version, but I'll leave the final call to a committer. Regards, Ewan
-
Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
Heikki Linnakangas <hlinnaka@iki.fi> — 2026-06-15T10:28:43Z
On 12/06/2026 04:53, Ewan Young wrote: > On Thu, Jun 11, 2026 at 11:10 PM <m.litsarev@postgrespro.ru> wrote: >> The patch attached > > Thanks for the report and patch. > > I looked at the data flow and agree this is a false positive. startpos is > assigned at the ftell() call inside the first if (difffile) block, and the > only way to reach the use at fseek() with difffile != NULL is for that same > block to have executed (since difffile is reassigned by the fopen(..., "r") > at the end of it). > > I should note I couldn't reproduce the warning here: with gcc 12.2 it stays > silent at every optimization level, including -Og. > > The fix looks correct to me. The raw diff looks large, but it's almost entirely > re-indentation — git diff -w shows the actual change is just moving the > braces to nest the read block inside the first one. > > For the record, the minimal alternative would be long startpos = 0; at the > declaration, which is a one-line diff. I'd lean toward your version, but > I'll leave the final call to a committer. LGTM as far as the patch goes. The function feels too nonchalant about errors while opening the file. The diff output file was created earlier in open_result_files() already, so it really should exist. I propose the attached, to bail out if the fopen() fails. (As the original patch, this looks a lot smaller with "diff -w") - Heikki
-
Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
m.litsarev@postgrespro.ru — 2026-06-16T15:22:44Z
> ...I propose the attached, to bail out if the fopen() fails. (As the > original patch, this looks a lot smaller with "diff -w") I agree the v2 patch is even better. Mikhail
-
Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
Heikki Linnakangas <hlinnaka@iki.fi> — 2026-06-17T06:03:28Z
On 16/06/2026 18:22, m.litsarev@postgrespro.ru wrote: >> ...I propose the attached, to bail out if the fopen() fails. (As the >> original patch, this looks a lot smaller with "diff -w") > I agree the v2 patch is even better. Committed, thanks! - Heikki
-
Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
Imran Zaheer <imran.zhir@gmail.com> — 2026-06-18T06:26:56Z
Hi I also reported [1] some similar warnings emitted from the old gcc some time ago. Do you think this should be worth getting fixed? Thanks Imran Zaheer [1]: https://www.postgresql.org/message-id/flat/CA+UBfa=H9RQdZ8Tof+SF7gMC-FTrsJ_w=Vnxs4OiBAaB_go+tQ@mail.gmail.com<span class="sewitjdq8nk9iqz"></span> On Wed, Jun 17, 2026 at 11:03 AM Heikki Linnakangas <hlinnaka@iki.fi> wrote: > > On 16/06/2026 18:22, m.litsarev@postgrespro.ru wrote: > >> ...I propose the attached, to bail out if the fopen() fails. (As the > >> original patch, this looks a lot smaller with "diff -w") > > I agree the v2 patch is even better. > > Committed, thanks! > > - Heikki > > >