Re: Fix warning: ‘startpos’ may be used uninitialized in function ‘results_differ’
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Ewan Young <kdbase.hack@gmail.com>, m.litsarev@postgrespro.ru
Cc: pgsql-hackers@lists.postgresql.org
Date: 2026-06-15T10:28:43Z
Lists: pgsql-hackers
Attachments
- v2-0001-Silence-uninitialized-variable-warning-with-some-.patch (text/x-patch) patch v2-0001
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
Commits
-
Silence uninitialized variable warning with some compiler versions
- f29299c42b0b 19 (unreleased) landed
-
pg_regress: Include diffs in TAP output
- 5720ae014364 19 (unreleased) cited