mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	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
This commit is contained in:
		@@ -298,6 +298,34 @@
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Does the compiler support #pragma GCC system_header? We optionally use it
 | 
			
		||||
 * to avoid warnings that we can't fix (e.g. in the perl headers).
 | 
			
		||||
 * See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
 | 
			
		||||
 *
 | 
			
		||||
 * Headers for which we do not want to show compiler warnings can,
 | 
			
		||||
 * conditionally, use #pragma GCC system_header to avoid warnings. Obviously
 | 
			
		||||
 * this should only be used for external headers over which we do not have
 | 
			
		||||
 * control.
 | 
			
		||||
 *
 | 
			
		||||
 * Support for the pragma is tested here, instead of during configure, as gcc
 | 
			
		||||
 * also warns about the pragma being used in a .c file. It's surprisingly hard
 | 
			
		||||
 * to get autoconf to use .h as the file-ending. Looks like gcc has
 | 
			
		||||
 * implemented the pragma since the 2000, so this test should suffice.
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
#define HAVE_PRAGMA_GCC_SYSTEM_HEADER	1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------
 | 
			
		||||
 *				Section 2:	bool, true, false
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,15 @@
 | 
			
		||||
#define HAS_BOOL 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Newer versions of the perl headers trigger a lot of warnings with our
 | 
			
		||||
 * compiler flags (at least -Wdeclaration-after-statement,
 | 
			
		||||
 * -Wshadow=compatible-local are known to be problematic). The system_header
 | 
			
		||||
 * pragma hides warnings from within the rest of this file, if supported.
 | 
			
		||||
 */
 | 
			
		||||
#ifdef HAVE_PRAGMA_GCC_SYSTEM_HEADER
 | 
			
		||||
#pragma GCC system_header
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Get the basic Perl API.  We use PERL_NO_GET_CONTEXT mode so that our code
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user