Обсуждение: Fix compilation warnings when CFLAGS -Og is specified
Dear hackers, # Background Based on [1], I did configure and build with options: (I used Meson build system, but it could be reproduced by Autoconf/Make) ``` $ meson setup -Dcassert=true -Ddebug=true -Dc_args=-Og ../builder $ cd ../builder $ ninja ``` My gcc version is 4.8.5, and ninja is 1.10.2. # Problem I got warnings while compiling. I found that these were reported when -Og was specified. All of raised said that the variable might be used without initialization. ``` [122/1910] Compiling C object src/backend/postgres_lib.a.p/libpq_be-fsstubs.c.o ../postgres/src/backend/libpq/be-fsstubs.c: In function ‘be_lo_export’: ../postgres/src/backend/libpq/be-fsstubs.c:537:24: warning: ‘fd’ may be used uninitialized in this function [-Wmaybe-uninitialized] if (CloseTransientFile(fd) != 0) ^ [390/1910] Compiling C object src/backend/postgres_lib.a.p/commands_trigger.c.o In file included from ../postgres/src/backend/commands/trigger.c:14:0: ../postgres/src/backend/commands/trigger.c: In function ‘ExecCallTriggerFunc’: ../postgres/src/include/postgres.h:314:2: warning: ‘result’ may be used uninitialized in this function [-Wmaybe-uninitialized] return (Pointer) X; ^ ../postgres/src/backend/commands/trigger.c:2316:9: note: ‘result’ was declared here Datum result; ^ [1023/1910] Compiling C object src/backend/postgres_lib.a.p/utils_adt_xml.c.o ../postgres/src/backend/utils/adt/xml.c: In function ‘xml_pstrdup_and_free’: ../postgres/src/backend/utils/adt/xml.c:1359:2: warning: ‘result’ may be used uninitialized in this function [-Wmaybe-uninitialized] return result; ^ [1600/1910] Compiling C object contrib/pg_stat_statements/pg_stat_statements.so.p/pg_stat_statements.c.o ../postgres/contrib/pg_stat_statements/pg_stat_statements.c: In function ‘pgss_planner’: ../postgres/contrib/pg_stat_statements/pg_stat_statements.c:960:2: warning: ‘result’ may be used uninitialized in this function[-Wmaybe-uninitialized] return result; ^ [1651/1910] Compiling C object contrib/postgres_fdw/postgres_fdw.so.p/postgres_fdw.c.o ../postgres/contrib/postgres_fdw/postgres_fdw.c: In function ‘postgresAcquireSampleRowsFunc’: ../postgres/contrib/postgres_fdw/postgres_fdw.c:5346:14: warning: ‘reltuples’ may be used uninitialized in this function[-Wmaybe-uninitialized] *totalrows = reltuples; ^ [1910/1910] Linking target src/interfaces/ecpg/test/thread/alloc ``` # Solution PSA the patch to keep the compiler quiet. IIUC my compiler considered that substitutions in PG_TRY() might be skipped. I'm not sure it is real problem, but the workarounds are harmless. Or, did I miss something for ignoring above? [1]: https://wiki.postgresql.org/wiki/Developer_FAQ#:~:text=or%20MSVC%20tracepoints.-,What%20debugging%20features%20are%20available%3F,-Compile%2Dtime Best Regards, Hayato Kuroda FUJITSU LIMITED
Вложения
At Tue, 1 Aug 2023 04:51:55 +0000, "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com> wrote in > Dear hackers, > > # Background > > Based on [1], I did configure and build with options: > (I used Meson build system, but it could be reproduced by Autoconf/Make) > > ``` > $ meson setup -Dcassert=true -Ddebug=true -Dc_args=-Og ../builder > $ cd ../builder > $ ninja > ``` > > My gcc version is 4.8.5, and ninja is 1.10.2. gcc 4.8 looks very old? AFAIS all of those complaints are false positives and if I did this correclty, gcc 11.3 seems to have been fixed in this regard. > # Solution > > PSA the patch to keep the compiler quiet. IIUC my compiler considered that > substitutions in PG_TRY() might be skipped. I'm not sure it is real problem, > but the workarounds are harmless. > > Or, did I miss something for ignoring above? > > [1]: https://wiki.postgresql.org/wiki/Developer_FAQ#:~:text=or%20MSVC%20tracepoints.-,What%20debugging%20features%20are%20available%3F,-Compile%2Dtime I think we don't want "fix" those as far as modern compilers don't emit the false positives. regards. -- Kyotaro Horiguchi NTT Open Source Software Center
Dear Horiguchi-san, Thanks for replying! > > My gcc version is 4.8.5, and ninja is 1.10.2. > > gcc 4.8 looks very old? > > AFAIS all of those complaints are false positives and if I did this > correclty, gcc 11.3 seems to have been fixed in this regard. I switched to newer gcc (8.3, still old...) and tried. As you said it did not raise such warnings. > > # Solution > > > > PSA the patch to keep the compiler quiet. IIUC my compiler considered that > > substitutions in PG_TRY() might be skipped. I'm not sure it is real problem, > > but the workarounds are harmless. > > > > Or, did I miss something for ignoring above? > > > > [1]: > https://wiki.postgresql.org/wiki/Developer_FAQ#:~:text=or%20MSVC%20trace > points.-,What%20debugging%20features%20are%20available%3F,-Compile%2Dti > me > > I think we don't want "fix" those as far as modern compilers don't > emit the false positives. OK, I should use newer one for modern codes. Sorry for noise and thank you for confirmation. Best Regards, Hayato Kuroda FUJITSU LIMITED