Skip to content

Commit 388e801

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 2039422 commit 388e801

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
@@ -381,6 +381,34 @@ typedef void (*pg_funcptr_t) (void);
381381
*/
382382
#define FLEXIBLE_ARRAY_MEMBER /* empty */
383383

384+
/*
385+
* Does the compiler support #pragma GCC system_header? We optionally use it
386+
* to avoid warnings that we can't fix (e.g. in the perl headers).
387+
* See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
388+
*
389+
* Headers for which we do not want to show compiler warnings can,
390+
* conditionally, use #pragma GCC system_header to avoid warnings. Obviously
391+
* this should only be used for external headers over which we do not have
392+
* control.
393+
*
394+
* Support for the pragma is tested here, instead of during configure, as gcc
395+
* also warns about the pragma being used in a .c file. It's surprisingly hard
396+
* to get autoconf to use .h as the file-ending. Looks like gcc has
397+
* implemented the pragma since the 2000, so this test should suffice.
398+
*
399+
*
400+
* Alternatively, we could add the include paths for problematic headers with
401+
* -isystem, but that is a larger hammer and is harder to search for.
402+
*
403+
* A more granular alternative would be to use #pragma GCC diagnostic
404+
* push/ignored/pop, but gcc warns about unknown warnings being ignored, so
405+
* every to-be-ignored-temporarily compiler warning would require its own
406+
* pg_config.h symbol and #ifdef.
407+
*/
408+
#ifdef __GNUC__
409+
#define HAVE_PRAGMA_GCC_SYSTEM_HEADER 1
410+
#endif
411+
384412

385413
/* ----------------------------------------------------------------
386414
* Section 2: bool, true, false

src/pl/plperl/plperl.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@
7474
#define HAS_BOOL 1
7575
#endif
7676

77+
/*
78+
* Newer versions of the perl headers trigger a lot of warnings with our
79+
* compiler flags (at least -Wdeclaration-after-statement,
80+
* -Wshadow=compatible-local are known to be problematic). The system_header
81+
* pragma hides warnings from within the rest of this file, if supported.
82+
*/
83+
#ifdef HAVE_PRAGMA_GCC_SYSTEM_HEADER
84+
#pragma GCC system_header
85+
#endif
7786

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

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy