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

Commitf0e1380

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 parent039567e commitf0e1380

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
@@ -290,6 +290,34 @@
290290
#endif
291291
#endif
292292

293+
/*
294+
* Does the compiler support #pragma GCC system_header? We optionally use it
295+
* to avoid warnings that we can't fix (e.g. in the perl headers).
296+
* See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
297+
*
298+
* Headers for which we do not want to show compiler warnings can,
299+
* conditionally, use #pragma GCC system_header to avoid warnings. Obviously
300+
* this should only be used for external headers over which we do not have
301+
* control.
302+
*
303+
* Support for the pragma is tested here, instead of during configure, as gcc
304+
* also warns about the pragma being used in a .c file. It's surprisingly hard
305+
* to get autoconf to use .h as the file-ending. Looks like gcc has
306+
* implemented the pragma since the 2000, so this test should suffice.
307+
*
308+
*
309+
* Alternatively, we could add the include paths for problematic headers with
310+
* -isystem, but that is a larger hammer and is harder to search for.
311+
*
312+
* A more granular alternative would be to use #pragma GCC diagnostic
313+
* push/ignored/pop, but gcc warns about unknown warnings being ignored, so
314+
* every to-be-ignored-temporarily compiler warning would require its own
315+
* pg_config.h symbol and #ifdef.
316+
*/
317+
#ifdef__GNUC__
318+
#defineHAVE_PRAGMA_GCC_SYSTEM_HEADER1
319+
#endif
320+
293321

294322
/* ----------------------------------------------------------------
295323
*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