Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7b5dec7

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 compilerflags. At least -Wdeclaration-after-statement, -Wshadow=compatible-local areknown to be problematic.To avoid these warnings, conditionally use #pragma GCC system_header beforeincluding 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 diagnosticpush/ignored/pop, but gcc warns about unknown warnings being ignored, so everyto-be-ignored-temporarily compiler warning would require its own pg_config.hsymbol and #ifdef.As the warnings are voluminous, it makes sense to backpatch this change. Butdon't do so yet, we first want gather buildfarm coverage - it's e.g. possiblethat 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 parenta02740e commit7b5dec7

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
@@ -360,6 +360,34 @@ typedef void (*pg_funcptr_t) (void);
360360
#endif
361361
#endif
362362

363+
/*
364+
* Does the compiler support #pragma GCC system_header? We optionally use it
365+
* to avoid warnings that we can't fix (e.g. in the perl headers).
366+
* See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
367+
*
368+
* Headers for which we do not want to show compiler warnings can,
369+
* conditionally, use #pragma GCC system_header to avoid warnings. Obviously
370+
* this should only be used for external headers over which we do not have
371+
* control.
372+
*
373+
* Support for the pragma is tested here, instead of during configure, as gcc
374+
* also warns about the pragma being used in a .c file. It's surprisingly hard
375+
* to get autoconf to use .h as the file-ending. Looks like gcc has
376+
* implemented the pragma since the 2000, so this test should suffice.
377+
*
378+
*
379+
* Alternatively, we could add the include paths for problematic headers with
380+
* -isystem, but that is a larger hammer and is harder to search for.
381+
*
382+
* A more granular alternative would be to use #pragma GCC diagnostic
383+
* push/ignored/pop, but gcc warns about unknown warnings being ignored, so
384+
* every to-be-ignored-temporarily compiler warning would require its own
385+
* pg_config.h symbol and #ifdef.
386+
*/
387+
#ifdef__GNUC__
388+
#defineHAVE_PRAGMA_GCC_SYSTEM_HEADER1
389+
#endif
390+
363391

364392
/* ----------------------------------------------------------------
365393
*Section 2:bool, true, false

‎src/pl/plperl/plperl.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@
7070
#defineHAS_BOOL 1
7171
#endif
7272

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

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp