postgres.git / summary / log / commit / refs
commit 704ef84ef232e02e241071b2faf0541d155c6b62
Author: Peter Eisentraut <peter@eisentraut.org>
Date: Sat Sep 12 10:35:33 2026 +0000
Use -isystem for LLVM include directories
LLVM's headers produce warnings under some of the warning options we
might like to use. For example, -Wshadow=local reports several
warnings from LLVM's headers when compiling llvmjit_inline.cpp. To
work around that, add the include directories reported by llvm-config
with -isystem rather than -I, which makes the compiler treat them as
system headers and not report warnings from them. In meson, this is a
built-in facility of the dependency() function, in configure we
implement it ourselves.
An alternative solution would have been to use "#pragma GCC
system_header", as is already done elsewhere in the tree. But that
seems less elegant here. Either, we would have to potentially create
a separate wrapper for each LLVM header, or we would have to route all
LLVM includes through a common header, which would break modularity.
Reviewed-by: Peter Geoghegan <pg@bowt.ie>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/84b6f128-91f5-480e-8a9e-7d0e8f538cea%40eisentraut.org
config/llvm.m4 | 7 +++++--
configure | 7 +++++--
meson.build | 5 ++++-
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/config/llvm.m4 b/config/llvm.m4
index 5d4f14cb900..496fd8f72a4 100644
--- a/config/llvm.m4
+++ b/config/llvm.m4
@@ -46,10 +46,13 @@ AC_DEFUN([PGAC_LLVM_SUPPORT],
# clear what the minimum version is.
# Collect compiler flags necessary to build the LLVM dependent
- # shared library.
+ # shared library. The include directories are added with -isystem
+ # rather than -I, so that warnings from LLVM's own headers are not
+ # reported under the warning options we select for our own code.
for pgac_option in `$LLVM_CONFIG --cppflags`; do
case $pgac_option in
- -I*|-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
+ -I*) LLVM_CPPFLAGS="-isystem ${pgac_option#-I} $LLVM_CPPFLAGS";;
+ -D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
esac
done
diff --git a/configure b/configure
index d42a7a794ff..002e31bf695 100755
--- a/configure
+++ b/configure
@@ -5105,10 +5105,13 @@ fi
# clear what the minimum version is.
# Collect compiler flags necessary to build the LLVM dependent
- # shared library.
+ # shared library. The include directories are added with -isystem
+ # rather than -I, so that warnings from LLVM's own headers are not
+ # reported under the warning options we select for our own code.
for pgac_option in `$LLVM_CONFIG --cppflags`; do
case $pgac_option in
- -I*|-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
+ -I*) LLVM_CPPFLAGS="-isystem ${pgac_option#-I} $LLVM_CPPFLAGS";;
+ -D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
esac
done
diff --git a/meson.build b/meson.build
index f4cde249242..52d6bc37dd9 100644
--- a/meson.build
+++ b/meson.build
@@ -924,7 +924,10 @@ endif
llvmopt = get_option('llvm')
llvm = not_found_dep
if have_cxx
- llvm = dependency('llvm', version: '>=14', method: 'config-tool', required: llvmopt)
+ # Use include_type 'system' so that warnings from LLVM's own headers are
+ # not reported under the warning options we select for our own code.
+ llvm = dependency('llvm', version: '>=14', method: 'config-tool',
+ include_type: 'system', required: llvmopt)
if llvm.found()