From: Heikki Linnakangas Date: Wed, 17 Jun 2026 06:00:49 +0000 (+0300) Subject: Silence uninitialized variable warning with some compiler versions X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f29299c42b0b7877db0c339147d95524be69b4e6;p=thirdparty%2Fpostgresql.git Silence uninitialized variable warning with some compiler versions The first "if (difffile)" block initializes the startpos variable, and the second "if (difffile)" block reads it. The second if-condition can only be true when the first one was true, so the startpos variable is always initialized when it's used. However, the compiler might not be able to deduce that, and warn about startpos being used uninitialized. To silence the warning, rearrange the if-checks. Also, bail out if the diff file cannot be opened, instead of ignoring it silently. Author: Mikhail Litsarev Reviewed-by; Ewan Young Discussion: https://www.postgresql.org/message-id/ee06f058c626cd37babd8c81579ffb1e@postgrespro.ru --- diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index 1c052cc0fbf..b53821dd10c 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -1534,31 +1534,33 @@ results_differ(const char *testname, const char *resultsfile, const char *defaul */ difffile = fopen(difffilename, "a"); - if (difffile) - { - startpos = ftell(difffile); - - /* Write diff header */ - fprintf(difffile, - "diff %s %s %s\n", - pretty_diff_opts, best_expect_file, resultsfile); - fclose(difffile); + if (!difffile) + bail("could not open file \"%s\" for writing: %m", difffilename); + startpos = ftell(difffile); - /* Run diff */ - snprintf(cmd, sizeof(cmd), - "diff %s \"%s\" \"%s\" >> \"%s\"", - pretty_diff_opts, best_expect_file, resultsfile, difffilename); - run_diff(cmd, difffilename); + /* Write diff header */ + fprintf(difffile, + "diff %s %s %s\n", + pretty_diff_opts, best_expect_file, resultsfile); + fclose(difffile); - /* - * Reopen the file for reading to emit the diff as TAP diagnostics. We - * can't keep the file open while diff appends to it, because on - * Windows the file lock prevents diff from writing. - */ - difffile = fopen(difffilename, "r"); - } + /* Run diff */ + snprintf(cmd, sizeof(cmd), + "diff %s \"%s\" \"%s\" >> \"%s\"", + pretty_diff_opts, best_expect_file, resultsfile, difffilename); + run_diff(cmd, difffilename); - if (difffile) + /* + * Emit the diff output as TAP diagnostics + * + * Reopen the file for reading. We can't keep the file open while diff + * appends to it, because on Windows the file lock prevents diff from + * writing. + */ + difffile = fopen(difffilename, "r"); + if (!difffile) + bail("could not open file \"%s\" for reading: %m", difffilename); + else { /* * In case of a crash the diff can be huge and all of the subsequent