8000 perl: Hide warnings inside perl.h when using gcc compatible compiler · postgres/postgres@99f8bc3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 99f8bc3

Browse files
committed
perl: Hide warnings inside perl.h when using gcc compatible compiler
New versions of perl trigger warnings within perl.h with our compiler flags. At least -Wdeclaration-after-statement, -Wshadow=compatible-local are known to be problematic. To avoid these warnings, conditionally use #pragma GCC system_header before including plperl.h. Alternatively, we could add the include paths for problematic headers with -isystem, but that is a larger hammer and is harder to search for. A more granular alternative would be to use #pragma GCC diagnostic push/ignored/pop, but gcc warns about unknown warnings being ignored, so every to-be-ignored-temporarily compiler warning would require its own pg_config.h symbol and #ifdef. As the warnings are voluminous, it makes sense to backpatch this change. But don't do so yet, we first want gather buildfarm coverage - it's e.g. possible that some compiler claiming to be gcc compatible has issues with the pragma. Author: Andres Freund <andres@anarazel.de> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: Discussion: https://postgr.es/m/20221228182455.hfdwd22zztvkojy2@awork3.anarazel.de
1 parent 982b9b1 commit 99f8bc3

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/include/c.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,34 @@
257257
#endif
258258
#endif
259259

260+
/*
261+
* Does the compiler support #pragma GCC system_header? We optionally use it
262+
* to avoid warnings that we can't fix (e.g. in the perl headers).
263+
* See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
264+
*
265+
* Headers for which we do not want to show compiler warnings can,
266+
* conditionally, use #pragma GCC system_header to avoid warnings. Obviously
267+
* this should only be used for external headers over which we do not have
268+
* control.
269+
*
270+
* Support for the pragma is tested here, instead of during configure, as gcc
271+
* also warns about the pragma being used in a .c file. It's surprisingly hard
272+
* to get autoconf to use .h as the file-ending. Looks like gcc has
273+
* implemented the pragma since the 2000, so this test should suffice.
274+
*
275+
*
276+
* Alternatively, we could add the include paths for problematic headers with
277+
* -isystem, but that is a larger hammer and is harder to search for.
278+
*
279+
* A more granular alternative would be to use #pragma GCC diagnostic
280+
* push/ignored/pop, but gcc warns about unknown warnings being ignored, so
281+
* every to-be-ignored-temporarily compiler warning would require its own
282+
* pg_config.h symbol and #ifdef.
283+
*/
284+
#ifdef __GNUC__
285+
#define HAVE_PRAGMA_GCC_SYSTEM_HEADER 1
286+
#endif
287+
260288

261289
/* ----------------------------------------------------------------
262290
* Section 2: bool, true, false

src/pl/plperl/plperl.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@
5757
#define HAS_BOOL 1
5858
#endif
5959

60+
/*
61+
* Newer versions of the perl headers trigger a lot of warnings with our
62+
* compiler flags (at least -Wdeclaration-after-statement,
63+
* -Wshadow=compatible-local are known to be problematic). The system_header
64+
* pragma hides warnings from within the rest of this file, if supported.
65+
*/
66+
#ifdef HAVE_PRAGMA_GCC_SYSTEM_HEADER
67+
#pragma GCC system_header
68+
#endif
6069

6170
/*
6271
* Get the basic Perl API. We use PERL_NO_GET_CONTEXT mode so that our code

0 commit comments

Comments
 (0)
0